{
  "openapi": "3.1.0",
  "info": {
    "title": "Відкритий API",
    "description": "Відкритий API MoreLogin пропонує комплексний та зручний для розробників RESTful інтерфейс, який дозволяє програмно керувати профілями браузерів, хмарними телефонами та пов'язаними ресурсами, забезпечуючи безперебійну автоматизацію, масштабованість та контроль. Відкритий API MoreLogin працює на вашому комп'ютері та доступний за адресою: https://api.morelogin.com",
    "version": "2026-09-05"
  },
  "tags": [
    {
      "name": "Authorization",
      "description": "API для розділу «Authorization»."
    },
    {
      "name": "Cloud Phone Management",
      "description": "API для розділу «Cloud Phone Management»."
    },
    {
      "name": "Live Streaming",
      "description": "Запуск, перевірка та завершення прямої трансляції Cloud Phone."
    },
    {
      "name": "Account & Quotas",
      "description": "Перевірка балансу гаманця та доступних ресурсів Cloud Phone."
    },
    {
      "name": "ADB",
      "description": "API для розділу «ADB»."
    },
    {
      "name": "Files",
      "description": "API для розділу «Files»."
    },
    {
      "name": "Apps",
      "description": "API для розділу «Apps»."
    },
    {
      "name": "Schedules",
      "description": "API для розділу «Schedules»."
    },
    {
      "name": "Touch",
      "description": "API для розділу «Touch»."
    },
    {
      "name": "Proxy Management",
      "description": "API для розділу «Proxy Management»."
    },
    {
      "name": "Group Management",
      "description": "API для розділу «Group Management»."
    },
    {
      "name": "Tag Management",
      "description": "API для розділу «Tag Management»."
    },
    {
      "name": "Monthly Billing",
      "description": "Отримання доступних місячних планів і активація Cloud Phone на місяць."
    }
  ],
  "x-tagGroups": [
    {
      "name": "",
      "tags": [
        "Authorization",
        "Cloud Phone Management",
        "Live Streaming",
        "Account & Quotas",
        "ADB",
        "Files",
        "Apps",
        "Schedules",
        "Touch",
        "Monthly Billing"
      ]
    }
  ],
  "paths": {
    "/balance": {
      "get": {
        "operationId": "getAccountAndCloudPhoneQuotas",
        "summary": "Отримати баланс і доступні ресурси Cloud Phone",
        "description": "Повертає баланс гаманця команди та доступні обсяги використання хмарних телефонів.\n- **Передумови**: учаснику, який викликає, потрібне право на витрати. Гаманець шукається за командою, тому ці цифри стосуються всієї команди, а не окремого учасника.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Одиниці**: `balance` — баланс гаманця **у центах**, а не у грошових одиницях. `remainingDuration` — залишок хвилин хмарного телефона, `remainingConcurrency` — кількість слотів; обидва обмежуються нулем і не йдуть у мінус.\n- **Вміст**: рівно ці три числа. Заморожені суми гаманця, розподіл витрачених і наданих хвилин та дати спливання існують вище в стеку, але тут навмисно не публікуються.\n- **Примітка**: виклик падає цілком, якщо не вдався запит гаманця або запит квот; часткові цифри він не повертає.",
        "tags": [
          "Account & Quotas"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/BalanceResponse"
          }
        }
      }
    },
    "/cloudphone/monthly/skus": {
      "get": {
        "operationId": "listMonthlyCloudPhoneSkus",
        "summary": "Список доступних місячних планів Cloud Phone",
        "description": "Повертає місячні продукти Cloud Phone, доступні команді.\n\n- **Ефект**: відсутній; запит не резервує ємність і не списує баланс. Лише читання.\n- **Використання**: передайте отриманий `skuId` до [`/cloudphone/create`](./open-api.yaml#operation/createUsingPOST). Ціна в центах США, строк — 30 днів.\n- **Порожній результат**: порожній масив `data` означає, що доступних місячних продуктів немає.\n\nТипові помилки див. у [Error Codes](../Getting%20Started/error-codes.md).",
        "tags": [
          "Monthly Billing"
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneSkusResponse"
          }
        }
      }
    },
    "/cloudphone/monthly/activate": {
      "post": {
        "operationId": "activateMonthlyCloudPhones",
        "summary": "Придбання й активація Cloud Phone на місяць",
        "description": "Купує та активує від 1 до 10 місячних Cloud Phone на 30 днів.\n\n- **Попередження**: **операція реально списує кошти з балансу команди.**\n- **Дозвіл**: потрібне право **Керування витратами/платежами**, інакше повертається `99012`.\n- **Спочатку створіть**: використайте [`/cloudphone/create`](./open-api.yaml#operation/createUsingPOST); створення дає неактивні записи й не списує кошти.\n- **Вибір**: ID мають бути унікальними, належати команді та використовувати активні 30-денні продукти. Різні місячні SKU можна змішувати. Несумісні стани чи замовлення, очікувані клієнтські замовлення та паралельні покупки відхиляють увесь запит.\n- **Списання й відновлення**: перевірка та списання виконуються цілком. Для одного оплаченого замовлення право відновлюється без повторного списання. Local API, Open API і клієнт мають спільний стан замовлення.\n- **Завершення**: підтверджує 30 днів для всіх; не вмикає телефони й автоподовження.\n- **Непідтверджена активація**: при `33422` `data.results` лишається повним і впорядкованим. Перевірте `status`, `expireTime`, `errorCode`.\n- **Повтор**: після таймауту запитайте [`/cloudphone/info`](./open-api.yaml#operation/infoUsingPOST) або [`/cloudphone/page`](./open-api.yaml#operation/pageUsingPOST).\n\nПомилки: `20002`, `20003`, `20004`, `20008`, `20041`, `20055`, `20068`, `20070`, `20071`, `33420`, `33421`, `33422`, `99001`, `99002`, `99012`. Див. [Error Codes](../Getting%20Started/error-codes.md).",
        "tags": [
          "Monthly Billing"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MonthlyCloudPhoneActivateRequest"
              },
              "example": {
                "ids": [
                  "1724032706822188",
                  "1724032729890861"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/MonthlyCloudPhoneActivateResponse"
          }
        }
      }
    },
    "/cloudphone/live/start": {
      "post": {
        "operationId": "startCloudPhoneLiveStreaming",
        "summary": "Почати пряму трансляцію",
        "description": "Запускає пряму трансляцію раніше завантаженого MP4 на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди, і його Сервіс має підтримувати прямі трансляції . `fileId` має посилатися на файл, завантажений як медіа для трансляції, вивантаження якого завершилося; усе інше відхиляється як недопустиме або протерміноване.\n- **Завершення**: **прийнято, але не завершено.** Відповідь лише підтверджує, що Сервіс прийняв запит. Опитуйте `/cloudphone/live/status`, доки `liveStatus` не стане `1`.\n- **Примітка**: обмеження «лише MP4» застосовується під час вивантаження файлу, а не тут.\n- **Повтор**: дедуплікації немає; повторний виклик знову надсилає команду запуску.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`, `33418`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLiveStartRequest"
              },
              "example": {
                "phoneId": "190000000000000001",
                "fileId": "820000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/cloudphone/live/status": {
      "post": {
        "operationId": "getCloudPhoneLiveStreamingStatus",
        "summary": "Отримати статус трансляції",
        "description": "Повідомляє, чи веде хмарний телефон пряму трансляцію на цей момент.\n- **Передумови**: телефон має належати вашій команді, а його Сервіс — підтримувати прямі трансляції. На відміну від запуску та зупинки, телефону **не** потрібно бути увімкненим чи зайнятим вами.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Значення**: `liveStatus` дорівнює `0` (трансляції немає) або `1` (триває трансляція). **Стану помилки не існує**: запуск, який так і не подіяв, просто залишається в `0`, тому обмежте опитування таймаутом.\n\nЗадокументовані бізнес-помилки: `33300`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveStatusResponse"
          }
        }
      }
    },
    "/cloudphone/live/end": {
      "post": {
        "operationId": "stopCloudPhoneLiveStreaming",
        "summary": "Завершити пряму трансляцію",
        "description": "Зупиняє пряму трансляцію на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди, і його Сервіс має підтримувати прямі трансляції. **Чи справді триває трансляція, не перевіряється**: команда зупинки надсилається в будь-якому разі.\n- **Завершення**: прийнято, але не завершено. Опитуйте `/cloudphone/live/status`, доки `liveStatus` не стане `0`.\n- **Повтор**: ідемпотентний за результатом; повторний виклик просто надсилає команду зупинки знову.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Live Streaming"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneLivePhoneRequest"
              },
              "example": {
                "phoneId": "190000000000000001"
              }
            }
          }
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/CloudPhoneLiveBooleanResponse"
          }
        }
      }
    },
    "/oauth2/token": {
      "post": {
        "operationId": "oauth2TokenPost",
        "summary": "Маркер доступу",
        "deprecated": false,
        "description": "Обмінює API ID та API-ключ на bearer-токен OAuth2.\n- **Передумови**: `client_id` — це API ID, а `client_secret` — API-ключ. Учасник має бути активний, а IP того, хто викликає, має пройти списки дозволених і заборонених IP для Open API.\n- **Ефект**: відсутній — токен самопідписаний, на сервері нічого не зберігається.\n- **Термін дії**: `expires_in` секунд, за замовчуванням 3600. **Ані refresh-токена, ані ендпоінта оновлення немає**; замість цього запросіть новий токен.\n- **Паралельність**: оскільки токени не мають стану, випуск нового **не** анулює попередні — одночасно можуть бути дійсними кілька. Токен перестає працювати лише після спливання терміну або під час ротації API-ключа.\n- **Повтор**: безпечний.\n\nЗадокументовані бізнес-помилки: `12002`, `35002`, `35005`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Authorization"
        ],
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": true,
            "example": "application/json",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "client_id": {
                    "description": "Ідентифікатор API ідентифікує учасника",
                    "type": "string"
                  },
                  "client_secret": {
                    "description": "Ключ API автентифікує ідентифікатор клієнта. Щоб викликати API MoreLogin, вам потрібно буде обміняти свій ідентифікатор API та ключ API на токен доступу. Зберігайте цей секрет у безпеці.",
                    "type": "string"
                  },
                  "grant_type": {
                    "description": "Назва пакета — обов’язкова, лише якщо не вказано appVersionId",
                    "type": "string",
                    "example": "client_credentials"
                  }
                },
                "required": [
                  "client_id",
                  "client_secret",
                  "grant_type"
                ]
              },
              "example": {
                "client_id": "1661515884160372",
                "client_secret": "string",
                "grant_type": "client_credentials"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `scope`, `access_token`, `token_type`, `expires_in` і `client_metadata`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "scope": {
                          "type": "string"
                        },
                        "access_token": {
                          "type": "string"
                        },
                        "token_type": {
                          "type": "string"
                        },
                        "expires_in": {
                          "type": "integer"
                        },
                        "client_metadata": {
                          "type": "object",
                          "properties": {
                            "name": {
                              "type": "string"
                            }
                          },
                          "required": [
                            "name"
                          ],
                          "x-apidog-orders": [
                            "name"
                          ],
                          "x-apidog-ignore-properties": []
                        }
                      },
                      "required": [
                        "scope",
                        "access_token",
                        "token_type",
                        "expires_in",
                        "client_metadata"
                      ],
                      "x-apidog-orders": [
                        "scope",
                        "access_token",
                        "token_type",
                        "expires_in",
                        "client_metadata"
                      ],
                      "x-apidog-ignore-properties": []
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ],
                  "x-apidog-orders": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ],
                  "x-apidog-ignore-properties": []
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "scope": "cloudphone",
                    "access_token": "example-access-token\n",
                    "token_type": "Bearer",
                    "expires_in": 3600,
                    "client_metadata": {
                      "name": "team name"
                    }
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            },
            "headers": {},
            "x-apidog-name": "成功",
            "x-apidog-ordering": 0
          }
        },
        "security": []
      }
    },
    "/oauth2/userinfo": {
      "get": {
        "operationId": "oauth2UserinfoGet",
        "summary": "Інформація про користувача",
        "deprecated": false,
        "description": "Повертає учасника й команду, яким належить поточний токен доступу.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: найдешевший спосіб перевірити, що токен ще дійсний, і дізнатися команду, до якої він прив'язаний.",
        "tags": [
          "Authorization"
        ],
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `teamId`, `teamName`, `memberId`, `memberNickName` і `memberEmail`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "teamId": {
                          "type": "string"
                        },
                        "teamName": {
                          "type": "string"
                        },
                        "memberId": {
                          "type": "string"
                        },
                        "memberNickName": {
                          "type": "string"
                        },
                        "memberEmail": {
                          "type": "string"
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "teamId": "1673823102599682",
                    "teamName": "example-name",
                    "memberId": "1673823102599682",
                    "memberNickName": "example-name",
                    "memberEmail": "string"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/uploadUrl": {
      "post": {
        "summary": "Отримати URL-адресу завантаження файлу",
        "deprecated": false,
        "description": "Запитує передпідписаний URL для вивантаження файлу, який отримає хмарний телефон.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: нічого не зберігається — URL формується на місці.\n- **Завершення**: синхронне. **Передпідписаний URL дійсний одну годину.** Надішліть вміст файлу методом `PUT`, а потім зареєструйте вивантаження через ендпоінт реєстрації; реєстрація до появи об'єкта відхиляється.\n- **Примітка**: повторне вивантаження тієї самої назви файлу перезаписує попередній об'єкт. Тимчасові об'єкти видаляються автоматично через 7 днів.",
        "operationId": "get",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Cloud phone ID"
                  },
                  "fileName": {
                    "type": "string",
                    "description": "Upload file name"
                  }
                },
                "required": [
                  "id",
                  "fileName"
                ]
              },
              "example": {
                "fileName": "live-video.mp4",
                "id": "1661515884160372"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `presignedUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Return result code 0:Normal Other codes are exceptions."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "error message\n"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "presignedUrl": {
                          "type": "string",
                          "description": "File upload URL use https PUT uploading files to cloud storage"
                        }
                      },
                      "required": [
                        "presignedUrl"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "presignedUrl": "https://example.com/resource"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/uploadFile": {
      "post": {
        "summary": "Завантаження файлів",
        "deprecated": false,
        "description": "Реєструє раніше завантажений файл, щоб хмарний телефон його отримав.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди, і **об'єкт уже має існувати за вказаним URL**: служба перевіряє його й відхиляє запит, якщо прочитати об'єкт не вдається. Вивантаження для прямої трансляції мають бути у MP4 і призначатися Сервісу, який підтримує трансляції.\n- **Завершення**: **прийнято, але не завершено.** Відповідь повертає `fileId` зі статусом «у процесі». Опитуйте ендпоінт результату вивантаження, доки статус не стане успішним або помилковим.\n- **Повтор**: дедуплікації немає; кожен виклик створює новий `fileId`.\n- **Примітка про поверхню API**: у Local API цей шлях — інший, старіший multipart-сценарій. Аналог цього ендпоінта в Local API — `/api/cloudphone/upload/file`.\n\nЗадокументовані бізнес-помилки: `33401`, `33419`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "fileUploadUsing",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string",
                    "example": "1661515884160372"
                  },
                  "url": {
                    "type": "string",
                    "description": "Object URL obtained from `presignedUrl` after the file bytes have been uploaded, or another publicly accessible download URL",
                    "example": "https://storage.example.com/cloudphone/test.jpg"
                  },
                  "uploadDest": {
                    "description": "Upload destination directory",
                    "type": "string",
                    "example": "/Download"
                  },
                  "uploadType": {
                    "type": "integer",
                    "enum": [
                      1,
                      2
                    ],
                    "default": 1,
                    "description": "File type (`1` = regular file, `2` = MP4 live-streaming file)"
                  }
                },
                "required": [
                  "id",
                  "url",
                  "uploadDest"
                ]
              },
              "example": {
                "id": "1661515884160372",
                "url": "https://storage.example.com/cloudphone/live-video.mp4",
                "uploadDest": "/Download",
                "uploadType": 2
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `fileId`, `id` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "fileId": {
                          "type": "string",
                          "description": "Uploaded file ID"
                        },
                        "id": {
                          "type": "string"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload status 0:uploading 1:success 2:failed"
                        }
                      },
                      "required": [
                        "fileId",
                        "id",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "fileId": "1661515884160111",
                    "id": "1661515884160372",
                    "status": 1
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/uploadFileResult": {
      "post": {
        "summary": "результат uploadFile",
        "deprecated": false,
        "description": "Опитує статус вивантаження файлу на хмарний телефон.\n- **Передумови**: телефон має належати вашій команді. Це найменш обмежений файловий ендпоінт: він не вимагає, щоб телефон був увімкнений або зайнятий вами.\n- **Значення**: `0` вивантажується, `1` успішно, `2` помилка.\n- **Порожній результат**: якщо `fileId` не знайдено, виклик усе одно завершується успіхом, але `data` дорівнює null. Трактуйте це як «поки не видно або вже відсутнє», а не як збій.\n- **Вартість**: запит обходить список файлів Сервіса, тому він недешевий. Опитуйте з помірним інтервалом, а не у щільному циклі.",
        "operationId": "fileUploadResult",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Cloud phone ID",
                    "type": "string",
                    "example": "1661515884160372"
                  },
                  "fileId": {
                    "type": "string",
                    "description": "Uploaded file ID"
                  }
                },
                "required": [
                  "id",
                  "fileId"
                ]
              },
              "example": {
                "id": "1661515884160372",
                "fileId": "1661515884160372"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `fileId`, `id` and `status`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "id": {
                          "type": "string"
                        },
                        "fileId": {
                          "type": "string",
                          "description": "Uploaded file ID"
                        },
                        "status": {
                          "type": "integer",
                          "description": "Upload status 0:uploading 1:success 2:failed"
                        }
                      },
                      "required": [
                        "fileId",
                        "id",
                        "status"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1661515884160372",
                    "fileId": "1661515884160111",
                    "status": 1
                  },
                  "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/download": {
      "post": {
        "operationId": "cloudphoneDownloadPost",
        "summary": "Завантаження файлу",
        "deprecated": false,
        "description": "Завантажує файл із хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: служба спершу обходить батьківський каталог і лише потім починає передачу, тому неіснуючий шлях призводить до помилки **тут**, а не під час опитування статусу. Ціль має бути звичайним файлом, а не каталогом.\n- **Завершення**: **прийнято, але не завершено.** Відповідь повертає `downId`; опитуйте `/cloudphone/download/result`, доки статус не стане успішним, помилковим або скасованим. Цей ендпоінт заново перевіряє, що телефон досі увімкнений і досі зайнятий вами.\n- **Повтор**: не ідемпотентно — кожен виклик заново обходить каталог і видає новий `downId`.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33507`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "cloud phone id"
                  },
                  "filePath": {
                    "type": "string",
                    "description": "file path: /sdcard/Download/a.txt\n"
                  }
                },
                "required": [
                  "filePath",
                  "id"
                ]
              },
              "example": {
                "filePath": "/sdcard/Download/report.csv",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `id` and `downId`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Cloud phone id"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download id "
                        }
                      },
                      "required": [
                        "id",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": "",
                  "data": {
                    "id": "1661515884160372",
                    "downId": "1661515884160999"
                  },
                  "requestId": "7dcf166a597842139af5ce12d25fe0f8"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/download/result": {
      "post": {
        "operationId": "cloudphoneDownloadResultPost",
        "summary": "Результат завантаження файлу",
        "deprecated": false,
        "description": "Опитує статус завантаження файлу з хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Передайте `downId`, повернений запитом на завантаження.\n- **Значення**: **шкала відрізняється від вивантаження**: `10` виконується, `20` успішно, `30` помилка, `40` скасовано. `downUrl` заповнюється лише після успішного завантаження.\n- **Примітка**: випадок «файл не існує» повідомляє сам запит на завантаження, який спершу обходить батьківський каталог, а не цей ендпоінт.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "cloud phone id"
                  },
                  "downId": {
                    "type": "string",
                    "description": "file download id"
                  }
                },
                "required": [
                  "downId",
                  "id"
                ]
              },
              "example": {
                "downId": "1661515884160999",
                "id": "1661515884160372"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success. `data` is an object with the fields `status`, `downId` and `downUrl`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Response code, 0 indicates success,>0 indicates failure"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "status": {
                          "type": "integer",
                          "description": "Download file status;10:Running, 20:Successful, 30:Failed, 40:Cancelled"
                        },
                        "downUrl": {
                          "type": "string",
                          "description": "File download URL; use it only when status is 20"
                        },
                        "downId": {
                          "type": "string",
                          "description": "File download task ID"
                        }
                      },
                      "required": [
                        "status",
                        "downId"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "status": 20,
                    "downId": "1661515884160999",
                    "downUrl": "https://get.morelogin.com/..."
                  },
                  "requestId": "17d9dbfd958e4f40a51897520138d3ff"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/setKeyBox": {
      "post": {
        "operationId": "cloudphoneSetKeyBoxPost",
        "summary": "Встановити скриньку з ключами",
        "deprecated": false,
        "description": "Установлює сертифікат keybox на хмарний телефон.\n- **Передумови**: `filePath` має вказувати на файл `.xml`, і хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: передає шлях до сертифіката Сервісу пристрою. MoreLogin нічого не зберігає, і служба не визначає кроку активації: чи потрібне пристрою перезавантаження, щоб сертифікат набрав чинності, визначається поведінкою Сервіса.\n- **Завершення**: синхронне прийняття Сервісом. Ендпоінта, який повідомляє про встановлений сертифікат, немає.",
        "tags": [
          "Files"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "filePath": {
                    "type": "string",
                    "description": "Шлях до файлу, наприклад, /sdcard/Download/xxx.xml"
                  },
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  }
                }
              },
              "example": {
                "filePath": "",
                "id": "0"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/install": {
      "post": {
        "operationId": "cloudphoneAppInstallPost",
        "summary": "Встановіть додаток на хмарний телефон",
        "deprecated": false,
        "description": "Установлює застосунок з бібліотеки команди на хмарний телефон.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Застосунок уже має існувати в бібліотеці команди або в публічному каталозі; укажіть його або через `appVersionId`, або через `packageName` разом із `versionCode`. Його також має бути завантажено до Сервіса, який обслуговує цей телефон, інакше встановлення не вдасться.\n- **Обмеження частоти**: не більше одного встановлення на телефон за секунду; швидший повторний виклик відхиляється.\n- **Завершення**: **прийнято, але не завершено.** Відповідь лише підтверджує, що запит поставлено в чергу. Опитуйте `/cloudphone/app/installedList`, щоб побачити, чи застосунок дійшов.\n- **Повтор**: безпечний після перевірки списку встановлених, з урахуванням обмеження одного виклику за секунду.\n\nЗадокументовані бізнес-помилки: `33005`, `33014`, `33714`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appVersionId": {
                    "description": "Ідентифікатор версії програми",
                    "type": "string"
                  },
                  "id": {
                    "description": "Ідентифікатор хмарного телефону",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "Назва пакета — обов’язкова, лише якщо не вказано appVersionId",
                    "type": "string"
                  },
                  "versionCode": {
                    "description": "Код версії — обов’язковий, лише якщо не вказано appVersionId",
                    "type": "integer"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "appVersionId": "1672940217990530",
                "id": "1673823102599682"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/page": {
      "post": {
        "operationId": "cloudphoneAppPagePost",
        "summary": "Отримати список програм APP",
        "deprecated": false,
        "description": "Виводить застосунки, які можна встановити на хмарний телефон.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Хмарний телефон не задіяний, тому він не мусить бути запущений.\n- **Вміст**: публічний каталог застосунків, тобто глобально доступні застосунки плюс опубліковані для вашої команди. Кожен запис містить свої версії в `appVersionList`, починаючи з найновіших; беріть `appVersionList[].id` як `appVersionId` для `/cloudphone/app/install`.\n- **Особливість пагінації**: результати перевпорядковуються після отримання сторінки, тому порядок стабільний лише в межах сторінки, а `total` відображає поточну сторінку, а не весь каталог. Для навігації використовуйте `pages`.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "Назва застосунку (часткова відповідність)",
                    "type": "string"
                  },
                  "pageNum": {
                    "description": "Номер сторінки; за замовчуванням: 1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "Елементів на сторінці; за замовчуванням: 10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "de",
                "pageNum": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить застосунки, доступні вашій команді на запитаній сторінці; версії кожного застосунку — у `appVersionList`, новіші спершу. `data.total` — кількість записів на поточній сторінці, а не загальна кількість; для нумерації сторінок використовуйте `data.pages`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "total": {
                          "type": "string",
                          "description": "Кількість записів на поточній сторінці"
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Ідентифікатор застосунку. Це не те значення, яке очікує `/cloudphone/app/install`."
                              },
                              "appName": {
                                "type": "string",
                                "description": "Назва застосунку"
                              },
                              "appIcon": {
                                "type": "string",
                                "description": "URL піктограми застосунку"
                              },
                              "packageName": {
                                "type": "string",
                                "description": "Ім'я пакета Android"
                              },
                              "categoryValue": {
                                "type": "integer",
                                "description": "Ідентифікатор категорії"
                              },
                              "sortNo": {
                                "type": "integer",
                                "description": "Порядок сортування в бібліотеці застосунків"
                              },
                              "appVersionList": {
                                "type": "array",
                                "description": "Версії застосунку, відсортовані за `versionCode` за спаданням (новіші спершу)",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "id": {
                                      "type": "string",
                                      "description": "Ідентифікатор версії застосунку. Передайте його як `appVersionId` до `/cloudphone/app/install`."
                                    },
                                    "versionCode": {
                                      "type": "string",
                                      "description": "Код версії"
                                    },
                                    "versionName": {
                                      "type": "string",
                                      "description": "Відображувана назва версії"
                                    },
                                    "installStatus": {
                                      "type": [
                                        "integer",
                                        "null"
                                      ],
                                      "description": "Для цієї операції завжди null. Стан встановлення запитуйте через `/cloudphone/app/installedList`."
                                    },
                                    "packageName": {
                                      "type": [
                                        "string",
                                        "null"
                                      ],
                                      "description": "Для цієї операції завжди null; використовуйте `packageName` рівня застосунку."
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "1",
                    "current": "1",
                    "pages": "1",
                    "dataList": [
                      {
                        "id": "1672940217990529",
                        "appName": "Depop",
                        "appIcon": "https://cdn.morelogin.com/app/depop.png",
                        "packageName": "com.depop",
                        "categoryValue": 1,
                        "sortNo": 0,
                        "appVersionList": [
                          {
                            "id": "1672940217990530",
                            "versionCode": "450000000",
                            "versionName": "4.50.0",
                            "installStatus": null,
                            "packageName": null
                          }
                        ]
                      }
                    ]
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/team/app/page": {
      "post": {
        "operationId": "cloudphoneTeamAppPagePost",
        "summary": "Список додатків команди",
        "deprecated": false,
        "description": "Виводить власну бібліотеку застосунків вашої команди, включно з передвстановленими застосунками.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Вміст**: джерело відрізняється від `/cloudphone/app/page`: тут застосунки, завантажені вашою командою, які повертаються плоским списком (по рядку на версію застосунку), а не вкладеними за версіями. Записи містять статус перевірки; доки триває оновлення, поля статусу описують **версію, яка оновлюється**, а не чинну.\n- **Примітка**: фільтрація за нерозпізнаним Сервісом дає порожню сторінку, а не помилку.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "appName": {
                    "description": "Назва застосунку (часткова відповідність)",
                    "type": "string"
                  },
                  "pageNo": {
                    "description": "Поточна сторінка; типово 1",
                    "type": "integer"
                  },
                  "pageSize": {
                    "description": "Елементів на сторінці; типово 10",
                    "type": "integer"
                  }
                }
              },
              "example": {
                "appName": "TikTok",
                "pageNo": 1,
                "pageSize": 10
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataPageResultCloudPhoneAppDto"
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "total": "15",
                    "current": "1",
                    "pages": "2",
                    "dataList": [
                      {
                        "id": "123456",
                        "appName": "Facebook",
                        "packageName": "com.facebook.katana",
                        "versionName": "450.0.0.1",
                        "versionCode": "450000000",
                        "enabled": true,
                        "desc": "Social media application",
                        "enableRoot": false
                      }
                    ]
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/installedList": {
      "post": {
        "operationId": "cloudphoneAppInstalledListPost",
        "summary": "Запит списку встановлених програм",
        "deprecated": false,
        "description": "Виводить застосунки, встановлені на хмарному телефоні на цей момент.\n- **Передумови**: телефон має належати вашій команді. На відміну від більшості команд хмарного телефона, займати його **не** потрібно, але Сервіса опитують у реальному часі, тому вимкнений телефон зазвичай призводить до помилки на боці Сервіса, а не до помилки MoreLogin.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: це сигнал завершення для `/cloudphone/app/install` і `/cloudphone/app/uninstall`. Назви та піктограми застосунків підставляються з каталогу; пакети, відсутні в каталозі, повертаються як є.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Ідентифікатор хмарного телефону",
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1674550360293464"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — масив об'єктів із полями `appName`, `appIcon`, `packageName`, `versionCode` і `versionName`; порожній масив, якщо повертати нічого.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "appName": {
                            "type": "string"
                          },
                          "appIcon": {
                            "type": "string"
                          },
                          "packageName": {
                            "type": "string"
                          },
                          "versionCode": {
                            "type": "string"
                          },
                          "versionName": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    {
                      "appName": "example-name",
                      "appIcon": "string",
                      "packageName": "example-name",
                      "versionCode": "string",
                      "versionName": "example-name"
                    }
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/start": {
      "post": {
        "operationId": "cloudphoneAppStartPost",
        "summary": "Запустити програму",
        "deprecated": false,
        "description": "Запускає встановлений застосунок на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Завершення**: відповідь підтверджує, що команда дійшла до Сервіса, а не що застосунок опинився на передньому плані. Ендпоінта, який повідомляє про запущений застосунок, немає: перевіряйте знімком екрана або shell-командою.\n- **Повтор**: дедуплікації немає; повторний виклик надсилає команду знову.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "description": "Ідентифікатор хмарного телефону",
                    "type": "string"
                  },
                  "packageName": {
                    "description": "Назва пакета програм",
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "packageName"
                ]
              },
              "example": {
                "id": "1674550360293464",
                "packageName": "com.depop"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "null"
                    },
                    "requestId": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/restart": {
      "post": {
        "operationId": "cloudphoneAppRestartPost",
        "summary": "Перезапустіть ПРОГРАМУ",
        "deprecated": false,
        "description": "Перезапускає застосунок на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. **Наявність застосунку не перевіряється**: відсутній пакет просто ні до чого не призведе.\n- **Завершення**: відповідь підтверджує, що команду надіслано Сервісу, а не що застосунок перезапустився. Перевірте через `/cloudphone/app/installedList` або спостерігаючи за пристроєм.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "Назва пакета програм"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку, якщо код > 0, повертається повідомлення про помилку"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  },
                  "required": [
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": true,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/stop": {
      "post": {
        "operationId": "cloudphoneAppStopPost",
        "summary": "Зупинити ПРОГРАМУ",
        "deprecated": false,
        "description": "Зупиняє запущений застосунок на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Чи встановлений застосунок і чи запущений він — не перевіряється.\n- **Завершення**: відповідь підтверджує, що команду надіслано Сервісу, а не що застосунок зупинився.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "Назва пакета програм"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється, якщо код > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/uninstall": {
      "post": {
        "operationId": "cloudphoneAppUninstallPost",
        "summary": "Видалити ПРОГРАМУ",
        "deprecated": false,
        "description": "Видаляє застосунок із хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: надсилає видалення й оновлює запис про встановлення для цього телефона.\n- **Завершення**: відповідь підтверджує, що запит прийнято. Перевірте через `/cloudphone/app/installedList`.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "packageName": {
                    "type": "string",
                    "description": "Назва пакета програм"
                  }
                }
              },
              "example": {
                "id": "0",
                "packageName": ""
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється, якщо код > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/openRoot": {
      "post": {
        "tags": [
          "Apps"
        ],
        "summary": "Увімкнення ROOT для додатка",
        "description": "Надає ROOT конкретним пакетам застосунків на хмарному телефоні.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується на сумісних пристроях; в інших Сервісів виклик проходить успішно, але не дає ефекту.\n- **Ефект**: надсилає на пристрій список дозволених пакетів і, як побічний ефект, вмикає перемикач ROOT. **MoreLogin нічого не зберігає**, тому надані права неможливо прочитати через API.\n- **Завершення**: синхронне прийняття Сервісом. Коли ROOT фактично набере чинності на пристрої, визначається поведінкою Сервіса; MoreLogin не перезавантажує телефон.\n- **Примітка**: зараз немає ендпоінта для відкликання ROOT в окремих пакетів. Щоб вимкнути глобальний перемикач, використовуйте `/cloudphone/enableRoot`.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "cloudphoneAppOpenRootPost",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiAppRootOperateDto"
              },
              "example": {
                "id": "12345678",
                "packageNames": [
                  "com.test"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/app/setHideAccessibilityApp": {
      "post": {
        "operationId": "cloudphoneAppSetHideAccessibilityAppPost",
        "summary": "Приховати додаток для спеціальних можливостей",
        "deprecated": false,
        "description": "Приховує застосунки зі списку служби доступності Android на одному або кількох хмарних телефонах.\n- **Передумови**: від 1 до 100 ідентифікаторів телефонів і від 1 до 100 назв пакетів. Телефони мають належати вашій команді, але їм **не** потрібно бути увімкненими чи зайнятими вами. Якщо жоден з ідентифікаторів не розв'язується, виклик повертає бізнес-помилку, а не системну.\n- **Ефект**: список надсилається Сервісу й **не зберігається в MoreLogin**, тому прочитати його назад неможливо. Підтримується на сумісних моделях; в інших Сервісів виклик проходить успішно, але без ефекту.\n- **Завершення**: синхронне. На деяких моделях кожен пакет надсилається окремим викликом до Сервіса, тому довгий список обробляється пропорційно довше, а збій посередині залишає застосованими попередні пакети.\n- **Примітка**: MoreLogin не перевіряє версію Android; описане обмеження за моделями походить від можливостей Сервіса, а назви пакетів передаються дослівно.",
        "tags": [
          "Apps"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Ідентифікатори хмарних телефонів"
                  },
                  "packageName": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Назва пакета програм. Порожній рядок еквівалентний очищенню, тоді як * або ALL приховує всі програми."
                  }
                }
              },
              "example": {
                "ids": [
                  "0"
                ],
                "packageName": [
                  "*"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "boolean"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється, якщо код > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": true,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/page": {
      "post": {
        "summary": "Отримання списку профілів хмарних телефонів",
        "description": "Посторінково виводить хмарні телефони, видимі автентифікованій команді.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Примітка**: повертаються телефони всіх Сервісів. Паролі платформних і динамічних проксі видаляються з відповіді.\n- **Застосування**: цей ендпоінт і `/cloudphone/info` служать сигналами завершення асинхронних операцій увімкнення та вимкнення, зміни пристрою в один клік і підготовки телефона.",
        "operationId": "pageUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bindIp": {
                    "type": "boolean",
                    "description": "Чи прив'язана IP-адреса: true = прив'язана, false = ні",
                    "example": false
                  },
                  "keyword": {
                    "type": "string",
                    "description": "Ключове слово для фільтрації: інформація про проксі-сервер, назва групи, назва тегу, назва середовища",
                    "example": "CP-424"
                  },
                  "pageNo": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Поточна сторінка",
                    "example": 1
                  },
                  "pageSize": {
                    "type": "integer",
                    "format": "int64",
                    "description": "Елементів на сторінці",
                    "example": 100
                  },
                  "sort": {
                    "type": "array",
                    "description": "Динамічні поля сортування. Наразі для хмарних телефонів підтримується лише \"envName\".",
                    "items": {
                      "type": "object",
                      "properties": {
                        "sortDirection": {
                          "type": "string",
                          "enum": [
                            "asc",
                            "desc"
                          ],
                          "description": "Напрямок сортування",
                          "example": "asc"
                        },
                        "sortField": {
                          "type": "string",
                          "description": "Поле для сортування (наразі підтримується лише \"envName\")",
                          "example": "envName"
                        }
                      },
                      "required": [
                        "sortDirection",
                        "sortField"
                      ]
                    },
                    "example": [
                      {
                        "sortDirection": "asc",
                        "sortField": "envName"
                      }
                    ]
                  }
                },
                "example": {
                  "bindIp": false,
                  "keyword": "CP-424",
                  "pageNo": 1,
                  "pageSize": 100,
                  "sort": [
                    {
                      "sortDirection": "asc",
                      "sortField": "envName"
                    }
                  ]
                }
              },
              "example": {
                "bindIp": false,
                "keyword": "CP-424",
                "pageNo": 1,
                "pageSize": 100,
                "sort": [
                  {
                    "sortDirection": "asc",
                    "sortField": "envName"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "повідомлення про помилку"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "current": {
                          "type": "string"
                        },
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/CloudPhoneProfile"
                          }
                        },
                        "pages": {
                          "type": "string"
                        },
                        "total": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "current": "1",
                    "dataList": [
                      {
                        "abnormalStatus": 1,
                        "adbInfo": {
                          "adbIp": "string",
                          "adbPassword": "string",
                          "adbPort": "9222",
                          "remark": "example remark",
                          "success": 1
                        },
                        "billingType": 1,
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": 1,
                        "createMemberName": "example-name",
                        "enableAdb": true,
                        "envName": "example-name",
                        "envRemark": "example remark",
                        "envStatus": 1,
                        "expireTime": "2026-09-01 12:00:00",
                        "groupId": "1673823102599682",
                        "groupName": "example-name",
                        "id": "1673823102599682",
                        "androidId": "1673823102599682",
                        "gaid": "1673823102599682",
                        "lastConnectDate": "2026-09-01 12:00:00",
                        "lastConnectMemberId": "1673823102599682",
                        "lastConnectMemberName": "example-name",
                        "lastStartDate": "2026-09-01 12:00:00",
                        "lastStartMemberId": "1673823102599682",
                        "lastStartMemberName": "example-name",
                        "proxy": {
                          "country": "string",
                          "countryCode": "string",
                          "createDate": "2026-09-01 12:00:00",
                          "delFlag": 1,
                          "expiryTime": "2026-09-01 12:00:00",
                          "exportIp": "9222",
                          "groupId": "1673823102599682",
                          "id": "1673823102599682",
                          "providerCode": "string",
                          "proxyAreaCode": "string",
                          "proxyCatagoryType": 1,
                          "proxyCheckStatus": 1,
                          "proxyInfo": "string",
                          "proxyIp": "string",
                          "proxyName": "example-name",
                          "proxyPort": 1,
                          "proxyRegionCode": "string",
                          "proxyStatus": 1,
                          "proxySub": {
                            "activeRecordId": "1673823102599682",
                            "businessId": "1673823102599682",
                            "createMember": 1,
                            "endTime": "2026-09-01 12:00:00",
                            "id": "1673823102599682",
                            "nextBillingTime": "2026-09-01 12:00:00",
                            "startTime": "2026-09-01 12:00:00",
                            "subPayMethod": "string",
                            "subStatus": 1,
                            "subType": 1,
                            "teamId": "1673823102599682"
                          },
                          "proxyType": 1,
                          "proxyTypeCode": "string",
                          "regionKey": "string",
                          "releaseTime": "2026-09-01 12:00:00",
                          "uniqueId": 1
                        },
                        "proxyStatus": 1,
                        "supportAdb": true,
                        "tagInfos": [
                          {
                            "id": "1673823102599682",
                            "tagName": "example-name"
                          }
                        ],
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": 1
                      }
                    ],
                    "pages": "1",
                    "total": "1"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/link": {
      "post": {
        "summary": "Створити посилання віддаленого підключення до хмарного телефона",
        "description": "Створює тимчасове посилання для доступу до хмарного телефона через браузер (лише Open API).\n\n- **Умови**: телефон належить вашій команді, доступний учаснику, який викликає API, увімкнений і не зайнятий іншим учасником. API не вмикає телефон автоматично.\n- **Дія**: кожен виклик створює нове посилання без запиту облікових даних підключення та зміни поточного підключення. Відкрийте `data.url` у браузері або створіть QR-код із повного URL.\n- **Строк дії**: рівно 5 хвилин від створення. Повторні переходи не витрачають і не подовжують посилання. Після закінчення строку викличте API знову. Поле `expiredTime` не повертається; цей строк не стосується облікових даних підключення.\n- **Підключення**: кожен успішний перехід запитує нові облікові дані підключення й перенаправляє на сторінку керування; це може вплинути на попереднє підключення. Невдалий перехід можна повторити до закінчення строку. Створення посилання не гарантує успішного подальшого підключення.\n- **Зберігання**: тримайте повний URL у таємниці. Відповідь містить `Cache-Control: no-store`. Використовуйте повернений URL без змін; адресу й параметри підключення визначає сервер.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `99002`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "createCloudPhoneRemoteLink",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID хмарного телефона MoreLogin."
                  },
                  "lang": {
                    "type": "string",
                    "description": "Мова сторінки, наприклад `zh-CN` або `en-US`. Якщо значення відсутнє або порожнє, використовується мова запиту; непідтримувані значення замінюються налаштованою мовою за замовчуванням. Мова записана в URL; параметр запиту `lang` можна змінити для перемикання мови сторінки."
                  }
                }
              },
              "example": {
                "id": "1710784536928649",
                "lang": "en-US"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успішно. `data.url` — тимчасове посилання для браузера, дійсне 5 хвилин.",
            "headers": {
              "Cache-Control": {
                "description": "Не кешуйте цю відповідь.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "no-store"
                  ]
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "type": "object",
                      "required": [
                        "url"
                      ],
                      "properties": {
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "description": "Тимчасовий URL для браузера. Зберігайте повний URL як конфіденційні облікові дані.",
                          "example": "https://gateway.example.com/app/cloudphone/qrcodeUrl?token=0123456789abcdef0123456789abcdef&lang=en-US"
                        }
                      }
                    },
                    "requestId": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "url": "https://gateway.example.com/app/cloudphone/qrcodeUrl?token=0123456789abcdef0123456789abcdef&lang=en-US"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "Shell",
            "source": "curl --request POST 'https://api.morelogin.com/cloudphone/link' \\\n  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\"id\":\"1710784536928649\",\"lang\":\"en-US\"}'"
          }
        ]
      }
    },
    "/cloudphone/create": {
      "post": {
        "summary": "Створення хмарного телефону",
        "description": "Купує та готує один або кілька хмарних телефонів.\n- **Передумови**: у тарифі має залишитися ємність, а добова квота створення не має бути витрачена. `country`, `timezone` і `language` перевіряються за списком, який підтримує вибраний Сервіс, тому непідтримувана комбінація відхиляється, а не підганяється непомітно. Координати обмежені ±180 за довготою та ±90 за широтою. Номер телефона відкидається, якщо вибраний SKU його не підтримує. Місячні SKU можна створювати через API, якщо їх повертає [`/cloudphone/monthly/skus`](./open-api.yaml#operation/listMonthlyCloudPhoneSkus); поточний період — 30 днів.\n- **Ефект**: створює записи хмарних телефонів. SKU з похвилинною оплатою стають доступними після підготовки; місячні створюються неактивними. Створення не списує кошти: місячні телефони оплачуються лише через [`/cloudphone/monthly/activate`](./open-api.yaml#operation/activateMonthlyCloudPhones), а похвилинні починають витрачати баланс або квоту після ввімкнення.\n- **Завершення**: **прийнято, але не завершено.** Інстанс Сервіса ще не готовий, а надто раннє увімкнення відхиляється. Опитуйте [`/cloudphone/info`](./open-api.yaml#operation/infoUsingPOST) або [`/cloudphone/page`](./open-api.yaml#operation/pageUsingPOST), доки `envStatus` не повідомить, що телефон вимкнений. Для місячного SKU перед увімкненням також виконайте [`/cloudphone/monthly/activate`](./open-api.yaml#operation/activateMonthlyCloudPhones).\n- **Повтор**: не ідемпотентний і не серіалізується. Ключа ідемпотентності немає. Не повторюйте наосліп після таймауту: спершу запитайте стан.\n\nЗадокументовані бізнес-помилки: `19064`, `20018`, `33338`, `33339`, `33340`, `33341`, `33342`, `33343`, `33344`, `33345`, `33398`, `33399`, `33400`, `33408`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "createUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "Модель хмарного телефона\nskuId:10002 model:Android 12\nskuId:10013 model:Android 13\nskuId:10005 model:Android 14\nskuId:10004 model:Android 15\nskuId:10014 model:Android 15A\nskuId:10015 model:Android 16\nПідтримувані регіони та відповідність часових поясів див. у [таблиці країн і часових поясів](/api-reference/appendix/country-time-zone)\n"
                  },
                  "quantity": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 10,
                    "description": "Кількість хмарних телефонів, що створюються. Діапазон значень: [1-10]"
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "Примітка до профілю (не більше 1500 символів)"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "ID групи. Для «без групи» вкажіть `\"0\"`."
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Назва наявної групи або назва нової групи, яку буде створено, якщо збігів немає."
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "Чи підбирати географічне розташування автоматично. За замовчуванням: true"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "Чи підбирати мову автоматично. За замовчуванням: true"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "Чи підбирати розташування (часовий пояс, країну) автоматично. За замовчуванням: true"
                  },
                  "country": {
                    "type": "string",
                    "description": "Код країни (наприклад `us`). Повний список див. у [таблиці країн і часових поясів](/api-reference/appendix/country-time-zone)"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Часовий пояс, наприклад America/New_York"
                  },
                  "language": {
                    "type": "string",
                    "description": "Мова, наприклад en-US"
                  },
                  "altitude": {
                    "type": "number",
                    "description": "Висота над рівнем моря"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Широта. Приклад: 22.309182"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Довгота. Приклад: 114.176817"
                  },
                  "speed": {
                    "type": "number",
                    "maximum": 400,
                    "description": "Швидкість руху"
                  },
                  "bearing": {
                    "type": "number",
                    "maximum": 360,
                    "description": "Напрямок руху"
                  },
                  "accuracy": {
                    "type": "number",
                    "maximum": 100,
                    "description": "Горизонтальна точність"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "Власний номер телефона. Вимоги до формату: має починатися зі знака +, код країни — від 1 до 3 цифр (крім 86), загальна довжина — від 8 до 14 цифр, допустимі лише + та цифри."
                  },
                  "brand": {
                    "type": "string",
                    "description": "Бренд пристрою. Його можна запитати через інтерфейс https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post."
                  },
                  "modelId": {
                    "type": "number",
                    "description": "ID моделі пристрою. Його можна запитати через інтерфейс https://guide.morelogin.com/api-reference/open-api/open-api/cloud-phone/paths/~1cloudphone~1brand~1models/post."
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "ID проксі"
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Назви міток. Порожні значення ігноруються."
                  }
                },
                "required": [
                  "skuId",
                  "quantity"
                ]
              },
              "example": {
                "skuId": "1661515884160372",
                "quantity": 1
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      },
                      "description": "Це хмарна система ідентифікації телефону"
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "error": {
                      "type": "object",
                      "properties": {}
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": [
                    "string"
                  ],
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "error": {}
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/powerOn": {
      "post": {
        "summary": "Стартап-хмарний телефон",
        "description": "Вмикає хмарний телефон.\n- **Передумови**: телефон має бути вимкнений. Виклик відхиляється, коли SKU знято з продажу або він на обслуговуванні, коли телефон зайнятий іншим учасником, доки перевіряється його проксі, коли на рахунку заборгованість або телефон деактивований, коли сплив місячний період, а також коли недоступні ні безплатні хвилини, ні паралельний слот, ні позитивний баланс. Деякі моделі додатково потребують найновішої версії клієнта для Windows.\n- **Ефект**: позначає телефон як такий, що завантажується, займає його для учасника, який викликає, і резервує паралельний слот або починає витрачати час. Відповідь повідомляє, що саме було використано.\n- **Завершення**: **прийнято, але не завершено.** Опитуйте `/cloudphone/info`, доки `envStatus` не стане «увімкнений»; помилка проявиться там як `errorCode` і `errorMsg`. Учасники з налаштованим хостом зворотного виклику також отримують webhook.\n- **Повтор**: другий одночасний виклик відхиляється відразу, а не ставиться в чергу. Після таймауту прочитайте `/cloudphone/info`, а не надсилайте запит повторно.\n\nЗадокументовані бізнес-помилки: `33300`, `33309`, `33315`, `33316`, `33317`, `33318`, `33321`, `33322`, `33323`, `33324`, `33325`, `33346`, `33347`, `33367`, `33376`, `33407`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "powerOnUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "disableMoneySavingMode": {
                    "type": "boolean",
                    "description": "Вимкнути режим енергозбереження, за замовчуванням: false"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1637226321190925"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/powerOff": {
      "post": {
        "summary": "Вимкніть хмарний телефон",
        "description": "Вимикає хмарний телефон.\n- **Передумови**: телефон має завантажуватися або бути увімкненим. Його неможливо вимкнути, доки він зайнятий іншим учасником, а також доки виконується зміна пристрою в один клік, перезавантаження або скидання.\n- **Ефект**: припиняє нарахування плати, звільняє паралельний слот, закриває облік споживання й анулює видані для сесії дані підключення. Вимкнення телефона, який ще завантажувався, перериває запуск, а не вимикає його.\n- **Завершення**: плата й локальний стан закриваються синхронно; вимкнення на боці Сервіса продовжується після відповіді, тому підтвердьте через `/cloudphone/info`.\n- **Повтор**: другий виклик повідомить, що телефон не запущений. Пакети перериваються на першій помилці, тому перед повтором перечитайте стан.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33308`, `33331`, `33332`, `33333`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "powerOffUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1596527092376632"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/edit/batch": {
      "post": {
        "summary": "Змінення профілю хмарного телефону",
        "description": "Оновлює конфігурацію одного або кількох хмарних телефонів.\n- **Передумови**: телефони мають належати команді. Регіон, мова та координати перевіряються за Сервісом точно так само, як під час створення. Переміщення телефона до групи, на яку у вас немає прав, відхиляється.\n- **Ефект**: перезаписує налаштування телефона й оновлює конфігурацію GPS; може створювати прив'язки міток. Плата не стягується, паралельність не змінюється.\n- **Завершення**: синхронне й ідемпотентне за однакового тіла запиту.",
        "operationId": "editBatchUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "ID хмарних телефонів"
                  },
                  "envName": {
                    "type": "string",
                    "maxLength": 64,
                    "minLength": 1,
                    "description": "Назва хмарного телефона (не більше 64 символів)"
                  },
                  "phoneNumber": {
                    "type": "string",
                    "description": "Власний номер телефона. Вимоги до формату: має починатися зі знака +, код країни — від 1 до 3 цифр (крім 86), загальна довжина — від 8 до 14 цифр, допустимі лише + та цифри."
                  },
                  "powerOnBillingStrategy": {
                    "type": "integer",
                    "enum": [
                      0,
                      1
                    ],
                    "description": "Спосіб тарифікації для хмарних телефонів без місячної підписки (0: за замовчуванням, 1: лише паралельний пакет)"
                  },
                  "proxyId": {
                    "type": "string",
                    "description": "ID проксі"
                  },
                  "groupId": {
                    "type": "string",
                    "description": "ID групи середовищ"
                  },
                  "groupName": {
                    "type": "string",
                    "maxLength": 50,
                    "description": "Назва наявної групи або назва нової групи, яку буде створено, якщо збігів немає."
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Назви міток на заміну. Порожні значення ігноруються."
                  },
                  "envRemark": {
                    "type": "string",
                    "maxLength": 1500,
                    "description": "Примітка до середовища (не більше 1500 символів, переноси рядків підтримуються)"
                  },
                  "automaticGeo": {
                    "type": "boolean",
                    "description": "Автопідбір геопозиції"
                  },
                  "automaticLanguage": {
                    "type": "boolean",
                    "description": "Автопідбір мови"
                  },
                  "automaticLocation": {
                    "type": "boolean",
                    "description": "Автопідбір розташування (часовий пояс і країна)"
                  },
                  "country": {
                    "type": "string",
                    "description": "Країна"
                  },
                  "timezone": {
                    "type": "string",
                    "description": "Часовий пояс"
                  },
                  "language": {
                    "type": "string",
                    "description": "Мова"
                  },
                  "latitude": {
                    "type": "number",
                    "description": "Широта"
                  },
                  "longitude": {
                    "type": "number",
                    "description": "Довгота"
                  },
                  "enableRoot": {
                    "type": "boolean",
                    "description": "Увімкнути глобальний ROOT"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": [
                  "1637238770951311"
                ],
                "proxyId": "0",
                "automaticGeo": false,
                "automaticLanguage": false,
                "automaticLocation": false,
                "country": "bo",
                "timezone": "America/La_Paz",
                "language": "de-CH",
                "latitude": 0,
                "longitude": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення: 0, Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/setProxy": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Налаштування проксі хмарного телефону",
        "description": "Прив'язує проксі до одного або кількох хмарних телефонів.\n- **Передумови**: укажіть хоча б одне з `ids` або `uniqueIds`. Телефони мають належати вашій команді; увімкненими їм бути **не** обов'язково. Якщо ви вказуєте `proxyId`, він має існувати, інакше виклик відхиляється.\n- **Ефект**: якщо `proxyId` не вказано або він дорівнює `0`, повторно використовується наявний проксі з цілком однаковими даними підключення, а **якщо збігів немає, у вашій команді створюється новий запис проксі**. Стан перевірки проксі скидається, а попередній проксі запам'ятовується.\n- **Завершення**: синхронне. **Увімкнені телефони отримують новий проксі негайно — перезапуск не потрібен**; вимкнені підхоплять його під час наступного запуску.\n- **Повтор**: повторна прив'язка наявного `proxyId` ідемпотентна, але повторення виклику із «сирими» даними підключення може щоразу створювати ще один запис проксі, коли дедуплікація не спрацьовує.\n\nЗадокументовані бізнес-помилки: `33300`, `33303`, `33320`, `14023`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "setProxy",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneSetProxyApiDto"
              },
              "example": {
                "ids": [
                  "1558968155668507"
                ],
                "uniqueIds": [
                  1001
                ],
                "proxy": {
                  "proxyIp": "192.168.1.100",
                  "proxyPort": 8080,
                  "proxyProvider": 2
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/delete/batch": {
      "post": {
        "summary": "Видалити хмарний телефон",
        "description": "Звільняє один або кілька хмарних телефонів.\n- **Передумови**: телефони не повинні перебувати в процесі передавання, а команда не повинна мати неоплачених замовлень за ними. Телефон не мусить бути вимкнений.\n- **Ефект**: інстанс Сервіса звільняється одразу. Телефон, який ніколи не активувався, видаляється повністю; активований зберігається як деактивований запис, тому й далі з'являється у списках зі статусом «деактивований».\n- **Завершення**: синхронне.\n- **Повтор**: телефони обробляються по одному, і виклик переривається на першій помилці, тому пакет може бути застосований частково. Перечитайте `/cloudphone/page` перед повтором і повторюйте лише для телефонів, які досі активні.",
        "operationId": "deleteUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "ids"
                ]
              },
              "example": {
                "ids": [
                  "1595755686723985"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/newMachine": {
      "post": {
        "summary": "Новий хмарний телефон одним клацанням миші",
        "description": "Замінює ідентичність пристрою хмарного телефона на місці (новий пристрій в один клік).\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Якщо ви вказуєте бренд і модель, вони мають підтримуватися SKU цього телефона. **Операція витрачає добову квоту створення хмарних телефонів** — ту саму, яку використовує `/cloudphone/create`.\n- **Ефект**: надсилає на пристрій новий бренд і модель, очищає записи про встановлені застосунки для цього телефона, скидає його номер і перериває будь-яке виконуване завдання ШІ. Точний набір ідентифікаторів, які перегенерує Сервіс, MoreLogin не визначає.\n- **Завершення**: **прийнято, але не завершено.** Телефон переходить у стан «новий пристрій в один клік»; опитуйте `/cloudphone/info`, доки він не покине цей стан.\n- **Паралельність**: доки операція виконується, увімкнення, вимкнення та всі команди, що потребують запущеного телефона, відхиляються. Другий одночасний виклик відхиляється, а не ставиться в чергу.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33326`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "oneNewUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "brand": {
                    "type": "string",
                    "description": "Бренд"
                  },
                  "modelId": {
                    "type": "integer",
                    "description": "Ідентифікатор моделі"
                  }
                }
              },
              "example": {
                "id": "1595372958075305"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 вказує на успіх, >0 вказує на невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  },
                  "required": [
                    "code",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/info": {
      "post": {
        "summary": "Деталі хмарного телефону",
        "description": "Повертає повні відомості про один хмарний телефон, включно з назвами групи та міток.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: основний ендпоінт статусу для асинхронних операцій. `envStatus` розрізняє стани «новий», «помилка створення», «вимкнений», «завантажується», «увімкнений», «скидається», «перезавантажується» та «зміна пристрою в один клік виконується»; `errorCode` і `errorMsg` містять причину, коли асинхронна операція завершилася невдало.",
        "operationId": "infoUsingPOST",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1672532391231745"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/queryByAndroidId": {
      "post": {
        "summary": "Отримання відомостей про хмарний телефон за AndroidId",
        "description": "Знаходить хмарний телефон за Android ID, який повідомляє пристрій.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Телефон не мусить бути увімкнений.\n- **Повертає**: ту саму структуру відомостей, що й `/cloudphone/info`.\n- **Крайні випадки**: порожній `androidId` повертає успіх із `data`, що дорівнює null, а не помилку валідації; а якщо один Android ID спільний для кількох телефонів, довільно повертається один із них.",
        "operationId": "queryByAndroidId",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "androidId": {
                    "type": "string",
                    "description": "androidId хмарного телефона",
                    "example": "8f7e6d5c4b3a2f1e"
                  }
                },
                "required": [
                  "androidId"
                ]
              },
              "example": {
                "androidId": "8f7e6d5c4b3a2f1e"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "example": 0
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "example": null
                    },
                    "data": {
                      "$ref": "#/components/schemas/CloudPhoneDetail"
                    },
                    "requestId": {
                      "type": "string",
                      "example": "4d0f4fa68613441e9a11446a6437bb5a"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "data": {
                    "id": "1673823102599682",
                    "androidId": "1673823102599682",
                    "gaid": "1673823102599682",
                    "envName": "example-name",
                    "groupId": "1673823102599682",
                    "groupName": "example-name",
                    "skuId": "1673823102599682",
                    "tagInfos": [
                      {
                        "id": "1673823102599682",
                        "tagName": "example-name"
                      }
                    ],
                    "billingType": 1,
                    "proxyStatus": 1,
                    "settings": {
                      "automaticGeo": true,
                      "automaticLocation": true,
                      "automaticLanguage": true,
                      "longitude": 1,
                      "latitude": 1
                    },
                    "device": {
                      "server": "string",
                      "countryName": "example-name",
                      "rom": 1,
                      "wifiBssid": "1673823102599682",
                      "bluetoothMac": "string"
                    },
                    "proxy": {
                      "id": "1673823102599682",
                      "proxyName": "example-name",
                      "proxyIp": "string"
                    },
                    "lastStartMemberId": "1673823102599682",
                    "lastStartMemberName": "example-name",
                    "lastStartDate": "2026-09-01 12:00:00",
                    "lastConnectMemberId": "1673823102599682",
                    "lastConnectMemberName": "example-name",
                    "lastConnectDate": "2026-09-01 12:00:00",
                    "envStatus": 1,
                    "abnormalStatus": 1,
                    "expireTime": "2026-09-01 12:00:00",
                    "envRemark": "example remark",
                    "createMember": "string",
                    "updateMember": "2026-09-01 12:00:00",
                    "updateDate": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMemberName": "example-name"
                  },
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/enableRoot": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Увімкнення або вимкнення глобального ROOT",
        "description": "Вмикає або вимикає глобальний перемикач ROOT для хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується на сумісних пристроях; в інших Сервісів виклик проходить успішно, але не дає ефекту.\n- **Ефект**: на відміну від `/cloudphone/app/openRoot`, налаштування **зберігається** в записі налаштувань телефона й потім надсилається Сервісу як перемикач для всього пристрою.\n- **Завершення**: синхронне. MoreLogin не перезавантажує телефон; коли зміна набере чинності на пристрої, визначається поведінкою Сервіса.\n- **Повтор**: ідемпотентний.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "enableRoot",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CloudPhoneEnableRootApiDTO"
              },
              "example": {
                "id": "1558968155668507",
                "enableRoot": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "null"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": null,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/screenCap": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Знімок екрана хмарного телефону",
        "description": "Робить знімок екрана хмарного телефона й повертає URL для завантаження.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних пристроях; решта Сервісів відхиляють виклик.\n- **Ефект**: На деяких моделях файл знімка видаляється з пристрою після того, як його зроблено.\n- **Завершення**: синхронне. Відповідь містить тимчасовий URL для завантаження зображення.\n- **Особливість**: На деяких моделях повідомлений термін спливання — фіксована година від моменту відповіді, а `success` завжди дорівнює true; це не справжній термін життя підпису. Завантажуйте зображення відразу, а не зберігайте URL.\n- **Повтор**: побічних ефектів, крім самого знімка, немає, тому повторювати безпечно.",
        "operationId": "screenCap",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефона",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `url`, `status`, `expireAt` і `success`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "url": {
                          "type": "string",
                          "description": "URL доступу до знімка екрана",
                          "example": "http://oss.morelogin.com/test.png"
                        },
                        "status": {
                          "type": "string",
                          "description": "Status representing immediate completion (\"finish\") or pending status (\"pending\")",
                          "example": "finish"
                        },
                        "expireAt": {
                          "type": "string",
                          "description": "Позначка часу завершення дії URL у мілісекундах (лише для деяких моделей)",
                          "example": "1756024767163"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "Успішно згенеровано",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється за code > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "url": "http://oss.morelogin.com/test.png",
                    "status": "finish",
                    "expireAt": "1756024767163",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/screenCapBase64": {
      "post": {
        "tags": [
          "Cloud Phone Management"
        ],
        "summary": "Знімок екрану хмарного телефону (відповідь base64)",
        "description": "Робить знімок екрана хмарного телефона й повертає зображення прямо у відповіді в base64.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. **Підтримується лише на сумісних пристроях** — усі інші Сервіси відхиляють виклик.\n- **Завершення**: синхронне. У разі помилки відповідь містить повідомлення про помилку замість даних зображення, тому перевіряйте `success` перед декодуванням.\n- **Підтримка моделей**: за документацією доступно лише на образах Android 12 та Android 15.\n- **Застосування**: віддавайте перевагу цьому ендпоінту замість `/cloudphone/screenCap`, коли не хочете залежати від URL, розміщеного Сервісом.",
        "operationId": "screenCapBase64",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID хмарного телефону",
                    "example": "1558968155668507"
                  }
                }
              },
              "example": {
                "id": "1558968155668507"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `captureBase64`, `errorMessage` і `success`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 = успіх, >0 = помилка"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "captureBase64": {
                          "type": "string",
                          "description": "Зображення у кодуванні Base64",
                          "example": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA....."
                        },
                        "errorMessage": {
                          "type": "string",
                          "description": "Повідомлення про помилку",
                          "example": "success"
                        },
                        "success": {
                          "type": "boolean",
                          "description": "Успішно згенеровано",
                          "example": true
                        }
                      }
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення; заповнюється при коді > 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "data": {
                    "captureBase64": "data:image/png;base64,/9j/4AAQSkZJRgABAQAA.....",
                    "errorMessage": "success",
                    "success": true
                  },
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/brand/models": {
      "post": {
        "operationId": "cloudphoneBrandModelsPost",
        "summary": "Запит щодо списку марок та моделей",
        "description": "Виводить бренди та моделі пристроїв, які підтримує SKU хмарного телефона.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Хмарний телефон не задіяний.\n- **Застосування**: виберіть допустимі `brand` і `modelId` перед викликом `/cloudphone/create` або `/cloudphone/newMachine`; обидва відхиляють комбінацію, яку цей ендпоінт не повертає.\n- **Примітка**: невідомий `skuId` дає порожній список, а не помилку.",
        "tags": [
          "Cloud Phone Management"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "skuId": {
                    "type": "string",
                    "description": "Ідентифікатор продукту Cloud Phone"
                  }
                },
                "required": [
                  "skuId"
                ]
              },
              "example": {
                "skuId": "10002"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "requestId": {
                      "type": "string"
                    },
                    "timestamp": {
                      "type": "integer"
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "brand": {
                            "type": "string"
                          },
                          "model": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  }
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "timestamp": 1,
                  "data": [
                    {
                      "brand": "string",
                      "model": "string"
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/updateAdb": {
      "post": {
        "summary": "Оновити стан ADB хмарного телефону",
        "description": "Вмикає або вимикає доступ через ADB на одному чи кількох хмарних телефонах.\n- **Передумови**: враховуються лише телефони, чий SKU підтримує ADB; якщо жоден з переданих не підходить, виклик відхиляється. Телефони, яким ніколи не виділявся інстанс, пропускаються.\n- **Ефект**: встановлює перемикач ADB у Сервіса й зберігає його для телефонів, які Сервіс прийняв.\n- **Часткова невдача**: якщо частину телефонів оброблено успішно, а частину — ні, **виклик усе одно повідомляє про помилку**. Трактуйте помилку як «частину телефонів могло бути змінено» й перечитайте стан.\n- **Завершення**: синхронне. Дані підключення читайте через `/cloudphone/batchAdbInfo`, який повертає дані лише для увімкнених телефонів із підтримкою ADB.\n\nЗадокументовані бізнес-помилки: `33350`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "updateAdbUsingPOST",
        "tags": [
          "ADB"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enableAdb": {
                    "type": "boolean"
                  },
                  "ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                },
                "required": [
                  "enableAdb",
                  "ids"
                ]
              },
              "example": {
                "enableAdb": true,
                "ids": [
                  "1633612946805630"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код результату повернення 0:Звичайний. Інші коди є винятками."
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор запиту на операцію"
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/batchAdbInfo": {
      "post": {
        "tags": [
          "ADB"
        ],
        "summary": "Пакетний запит інформації ADB",
        "description": "Отримує дані підключення ADB для не більш ніж 200 хмарних телефонів.\n- **Передумови**: телефони мають належати вашій команді. Займати їх **не** потрібно. Дані отримуються лише для увімкнених телефонів, чий SKU підтримує ADB.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Часткові результати**: результати відповідають запитаним ідентифікаторам і **ніколи не падають цілком**. Коли дані недоступні, причину вказано в `remark`: телефон не існує, не увімкнений, не підтримує ADB або запит до Сервіса не вдався. Прочитайте `remark`, перш ніж вважати порожній запис помилкою.\n- **Різні Сервіси**: один запит може охоплювати телефони різних Сервісів; служба групує їх усередині себе й об'єднує результати.\n- **Примітка**: спершу увімкніть ADB через `/cloudphone/updateAdb`.",
        "operationId": "batchAdbInfoOpenApi",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApiBatchAdbInfoDto"
              },
              "example": {
                "envIds": [
                  "1674380838117474",
                  "1675787900043353"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Успіх",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponseDataListApiBatchAdbInfoResultDto"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": [
                    {
                      "id": "1674380838117474",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "192.168.1.100",
                      "adbPassword": "abc12345",
                      "adbPort": "5555",
                      "command": null,
                      "expireTime": null,
                      "remark": null
                    },
                    {
                      "id": "1675787900043353",
                      "supportAdb": true,
                      "envStatus": 4,
                      "adbIp": "10.0.0.50",
                      "adbPassword": "xyz78900",
                      "adbPort": "22",
                      "command": "ssh -L 5555:localhost:5555 user@10.0.0.50 -p 22",
                      "expireTime": "2026-05-23 12:00:00",
                      "remark": null
                    }
                  ]
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/exeCommand": {
      "post": {
        "summary": "Виконати команду оболонки",
        "description": "Виконує shell-команду на хмарному телефоні й повертає її вивід.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди.\n- **Ефект**: цілком визначається командою. MoreLogin нічого не зберігає й **не застосовує ані білого списку команд, ані обмеження довжини**; привілеї, з якими виконується команда, задає Сервіс пристрою. Якщо команді потрібен root, увімкніть глобальний root окремо.\n- **Завершення**: синхронне — `data` містить вивід команди, а не ідентифікатор завдання.\n- **Повтор**: журналу виконання, до якого можна звернутися, немає, тому після таймауту результат залишається невідомим. Повторюйте лише ті команди, які безпечно виконувати двічі.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "executeShellCommand",
        "tags": [
          "ADB"
        ],
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID хмарного телефона"
                  },
                  "command": {
                    "type": "string",
                    "description": "Shell-команда для виконання"
                  }
                },
                "required": [
                  "id",
                  "command"
                ]
              },
              "example": {
                "command": "am start -n com.android.chrome/com.google.android.apps.chrome.Main",
                "id": "1674153897828425"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді: 0 означає успіх, >0 означає невдачу"
                    },
                    "data": {
                      "type": "string",
                      "description": "Інформація про відповідь"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення відповіді: Повідомлення про помилку буде повернуто, коли код буде більшим за 0"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Унікальний ідентифікатор запиту; вкажіть його при зверненні до підтримки"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg"
                  ]
                },
                "example": {
                  "code": 0,
                  "data": "string",
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d"
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/rpa/template/market/page": {
      "post": {
        "operationId": "cloudphoneRpaTemplateMarketPagePost",
        "summary": "Отримати шаблони сторінок ринку",
        "deprecated": false,
        "description": "Виводить шаблони RPA з публічного маркетплейсу.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою. Шаблони глобальні, вони не обмежені командою.\n- **Локалізація**: заголовки та описи повертаються мовою запиту.\n- **Застосування**: `parameter` — це JSON-рядок, що описує змінні шаблону, і саме йому має відповідати `templateParameter` під час створення розкладу. Для шаблонів без змінних значення дорівнює null.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "pageNo": null,
                "pageSize": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "Назва шаблону ринку"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "Параметр шаблону JSON-рядок"
                              },
                              "description": {
                                "type": "string",
                                "description": "Опис шаблону ринку"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "сортувати"
                              },
                              "author": {
                                "type": "string",
                                "description": "автор"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "Час останнього оновлення"
                              }
                            },
                            "required": [
                              "parameter"
                            ]
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "author": "example-author",
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/template/personal/page": {
      "post": {
        "operationId": "cloudphoneRpaTemplatePersonalPagePost",
        "summary": "Отримати особисті шаблони сторінок",
        "deprecated": false,
        "description": "Виводить шаблони RPA, створені вашою командою.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Вміст**: окреме сховище, не пов'язане з маркетплейсом, обмежене вашою командою, з простими одномовними заголовками.\n- **Пріоритет**: якщо ідентифікатор шаблону існує в обох сховищах, під час створення розкладу він розв'язується у шаблон вашої команди.\n- **Застосування**: `parameter` описує змінні шаблону точно так само, як у шаблонів маркетплейсу.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону"
                  },
                  "desc": {
                    "type": "string",
                    "description": "Опис шаблону"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "searchKey": null,
                "desc": "string",
                "pageNo": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string"
                              },
                              "title": {
                                "type": "string",
                                "description": "Назва шаблону ринку"
                              },
                              "parameter": {
                                "type": "string",
                                "description": "Параметр шаблону JSON-рядок"
                              },
                              "description": {
                                "type": "string",
                                "description": "Опис шаблону ринку"
                              },
                              "appIconUrls": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "sort": {
                                "type": "integer",
                                "description": "сортувати"
                              },
                              "updateDate": {
                                "type": "string",
                                "description": "Час останнього оновлення"
                              }
                            }
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "title": "example-title",
                        "parameter": "{\"key\":\"value\"}",
                        "description": "example description",
                        "appIconUrls": [
                          "https://example.com/resource"
                        ],
                        "sort": 1,
                        "updateDate": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/task/page": {
      "post": {
        "operationId": "cloudphoneRpaTaskPagePost",
        "summary": "Отримати список розкладів",
        "deprecated": false,
        "description": "Посторінково виводить розклади RPA команди.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Застосування**: `taskState` кожного розкладу служить сигналом завершення для `/cloudphone/rpa/task/cancel`.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": [
                      "boolean",
                      "null"
                    ],
                    "description": "Чи увімкнено розклад"
                  },
                  "searchKey": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Нечіткий пошук за назвою розкладу, описом і заголовком шаблону"
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Стан розкладу; 0: очікує виконання; 1: виконується; 2: виконання завершено 3: скасовано\n"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "за замовчуванням: 1"
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "за замовчуванням: 10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10,
                "taskState": 0,
                "searchKey": "daily login",
                "enabled": true
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "string",
                                "description": "Ідентифікатор розкладу"
                              },
                              "taskName": {
                                "type": "string",
                                "description": "Назва завдання запланувати"
                              },
                              "createMember": {
                                "type": "string",
                                "description": "Ім'я учасника"
                              },
                              "enabled": {
                                "type": "boolean",
                                "description": "Чи ввімкнено"
                              },
                              "endTime": {
                                "type": "string",
                                "description": "Час завершення завдання"
                              },
                              "failCount": {
                                "type": "integer",
                                "description": "Кількість невдалих виконань"
                              },
                              "handleTime": {
                                "type": "string",
                                "description": "Час початку виконання"
                              },
                              "notes": {
                                "type": "string",
                                "description": "нотатки до розкладу"
                              },
                              "scheduleConfig": {
                                "type": "string",
                                "description": "Налаштування розкладу завдань"
                              },
                              "successCount": {
                                "type": "integer",
                                "description": "Кількість успішних виконань"
                              },
                              "taskPreviewTimeTable": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "cloudPhoneId": {
                                      "type": "string",
                                      "description": "Ідентифікатор хмарного телефону"
                                    },
                                    "cloudPhoneName": {
                                      "type": "string",
                                      "description": "Назва хмарного телефону"
                                    },
                                    "times": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      },
                                      "description": "Список часу виконання"
                                    }
                                  }
                                }
                              },
                              "taskState": {
                                "type": "integer",
                                "description": "Стан завдання заплановано. 0: очікування; 1: виконання; 2: завершено; 3: скасовано"
                              },
                              "templateId": {
                                "type": "string",
                                "description": "Ідентифікатор шаблону"
                              },
                              "templateTitle": {
                                "type": "string",
                                "description": "Назва шаблону"
                              }
                            },
                            "required": [
                              "createMember"
                            ]
                          },
                          "description": "Список планів"
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "createMember": "string",
                        "enabled": true,
                        "endTime": "2026-09-01 12:00:00",
                        "failCount": 1,
                        "handleTime": "2026-09-01 12:00:00",
                        "notes": "string",
                        "scheduleConfig": "string",
                        "successCount": 1,
                        "taskPreviewTimeTable": [
                          {
                            "cloudPhoneId": "1673823102599682",
                            "cloudPhoneName": "example-name",
                            "times": [
                              "2026-09-01 12:00:00"
                            ]
                          }
                        ],
                        "taskState": 1,
                        "templateId": "1673823102599682",
                        "templateTitle": "example-title"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/task/save": {
      "post": {
        "operationId": "cloudphoneRpaTaskSavePost",
        "summary": "Створення розкладу",
        "deprecated": false,
        "description": "Зберегти заплановане завдання хмарного телефону.\n\ntemplateParameter Parameter Specification\n 1. __Parameter Source__\nParameter keys must be extracted from the `parameter` field returned by the following APIs:\n- Get market template pages\n- Get Personal template pages\n2.  __Data Structure__\n- Submit parameters in JSON object format: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Final parameter values must be deserialized according to business logic before use\n3. __Common Type Parameters__\nFor the following parameter types, pass values directly in the corresponding format:\n- string: `{\"name\": \"John\"}`\n- decimal / number: `{\"amount\": 100.50}`\n- boolean: `{\"enabled\": true}`\n4. __Media Type Parameters__\nFor media parameters such as image (pic) or video (video), in addition to basic information, a fixed key `\"__Extra__\"` must be included. Example format:\n```json\n{\n    \"__Extra__\": {\n        \"pic\": {\n            \"name\": \"pic_name\",\n            \"size\": 204800\n        },\n        \"video\": {\n            \"name\": \"video_name\",\n            \"size\": 204800000\n        }\n    },\n    \"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n    \"video\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n5. __Parameter Configuration Example__\nThe following example demonstrates how to configure the `templateParameter` parameter when saving a plan using a market template:\n- __Step 1: Retrieve Template Parameters__\nCall the Market Template API:\n`GET /api/cloudphone/rpa/template/market/page`\nExtract the `parameter` field from the response, for example:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Video\\\",\\\"type\\\":\\\"video\\\",\\\"required\\\":true,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":1,\\\"sizeLimit\\\":{\\\"value\\\":200,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"mp4\\\",\\\"mov\\\"]}},\\\"videoDescription\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Video Caption\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":1000},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":2}},\\\"coverUrl\\\":{\\\"type\\\":\\\"image\\\",\\\"extra\\\":{\\\"name\\\":\\\"Cover Image\\\",\\\"type\\\":\\\"image\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":3,\\\"sizeLimit\\\":{\\\"value\\\":5,\\\"unit\\\":\\\"MB\\\"},\\\"formatType\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}},\\\"enableAIGC\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"AI Label\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":4}},\\\"productId\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Product ID only supports digits, with a maximum of 50 characters.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Product Title\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Get Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Step 2: Build the Parameter JSON__\nConstruct the JSON object according to the parameter requirements:\n```json\n{\n  \"__Extra__\": {\n    \"videoDownloadUrl\": {\n      \"name\": \"video_name.mp4\",\n      \"size\": 204800000\n    }\n  },\n  \"videoDownloadUrl\": \"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\"\n}\n```\n- __Step 3: Escape the JSON String__\nConvert the JSON object into an escaped string format:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"https://get.morelogin.com/pre/cloudPhoneTaskVideo/1542431036481556/4c4fed83685345ae8f1505fbe0c2f123/baby.mp4\\\"}\"\n```\n- __Step 4: API Call__\nPass the escaped string as the value of the `templateParameter` parameter to the target API.\n",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskName": {
                    "type": "string",
                    "description": "Назва завдання"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "ID шаблону"
                  },
                  "templateType": {
                    "type": "string",
                    "description": "Тип шаблону. PERSONAL:персональний; MARKET:маркетплейс"
                  },
                  "taskType": {
                    "type": "string",
                    "description": "Тип завдання. TEMPORARY або SCHEDULED"
                  },
                  "notes": {
                    "type": "string",
                    "description": "Примітки плану"
                  },
                  "cloudPhoneConfigs": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "ID хмарного телефону"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "Час виконання завдання, часовий пояс UTC+0"
                        },
                        "templateParameter": {
                          "type": "string",
                          "description": "Параметри шаблону визначаються в персональних або маркетплейс-шаблонах. Параметри в шаблоні визначаються як:{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}} При запиті параметрів передається:{\"Test\":\"xxxx\"}"
                        }
                      },
                      "required": [
                        "cloudPhoneId",
                        "triggerTime",
                        "templateParameter"
                      ]
                    },
                    "description": "Колекція конфігурацій розкладу хмарних телефонів"
                  },
                  "scheduleConfig": {
                    "type": "object",
                    "properties": {
                      "endTime": {
                        "type": "string",
                        "description": "дата-час"
                      },
                      "scheduleType": {
                        "type": "string",
                        "description": "Тип розкладу. ONCE:одноразовий; DAILY:щоденний"
                      }
                    },
                    "required": [
                      "endTime",
                      "scheduleType"
                    ],
                    "description": "Конфігурація розкладу завдання"
                  }
                },
                "required": [
                  "cloudPhoneConfigs",
                  "scheduleConfig",
                  "taskName",
                  "taskType",
                  "templateId",
                  "templateType"
                ]
              },
              "example": {
                "cloudPhoneConfigs": [
                  {
                    "cloudPhoneId": "1661515884160372",
                    "triggerTime": "string",
                    "templateParameter": "string"
                  }
                ],
                "scheduleConfig": {
                  "endTime": "string",
                  "scheduleType": "string"
                },
                "taskName": "example-name",
                "taskType": "string",
                "templateId": "1661515884160372",
                "templateType": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу integer.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає помилку"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "ID трасування запиту"
                    },
                    "data": {
                      "type": "integer",
                      "description": "ID розкладу"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/onceTask/save": {
      "post": {
        "operationId": "cloudphoneRpaOnceTaskSavePost",
        "summary": "Створення одноразового розкладу",
        "deprecated": false,
        "description": "Зберегти хмарний телефон після запланованого завдання\n\nСпецифікація параметра templateParameter\n1. __Джерело параметра__\nКлючі параметрів мають бути вилучені з поля `parameter`, що повертається такими API:\n- Отримати сторінки шаблонів ринку\n- Отримати сторінки персональних шаблонів\n2. __Структура даних__\n- Надсилати параметри у форматі об'єкта JSON: `{\"key1\": \"value1\", \"key2\": \"value2\"}`\n- Кінцеві значення параметрів мають бути десеріалізовані відповідно до бізнес-логіки перед використанням\n3. __Параметри загального типу__\nДля наступних типів параметрів передайте значення безпосередньо у відповідному форматі:\n- рядок: `{\"name\": \"John\"}`\n- десяткове / число: `{\"amount\": 100.50}`\n- логічний: `{\"enabled\": true}`\n4. __Параметри типу медіа__\nДля медіа-параметрів, таких як зображення (pic) або відео (video), окрім основної інформації, необхідно включити фіксований ключ `__Extra__\"`. Приклад формату:\n```json\n{\n\"__Extra__\": {\n\"pic\": {\n\"name\": \"pic_name\",\n\"size\": 204800\n},\n\"video\": {\n\"name\": \"video_name\",\n\"size\": 204800000\n}\n},\n\"pic\": \"https://get.morelogin.com/prod/cloudPhoneTaskVideo/1556061681934880/1c62314c7e2b4d298abe8d5452d7c050/test.png\",\n\"video\": \"morelogin://cloudfile?ids=1,2\"\n}\n```\n5. __Приклад налаштування параметра__\nУ наступному прикладі показано, як налаштувати параметр `templateParameter` під час збереження плану за допомогою шаблону ринку:\n- __Крок 1: Отримання параметрів шаблону__\nВиклик API шаблону ринку:\n`GET /api/cloudphone/rpa/template/market/page`\nВитягніть поле `parameter` з відповіді, наприклад:\n\n```json\n\"parameter\": \"{\\\"videoDownloadUrl\\\":{\\\"type\\\":\\\"video\\\",\\\"extra\\\":{\\\"name\\\":\\\"Select Відео\", \"тип\": \"відео\", \"обов'язкове\": \"правда\", \"значення за замовчуванням\": \"увімкнено\": \"false\", \"індекс\": 1, \"ліміт розміру\": \"значення\": 200, \"одиниця\": \"МБ\"}, \"тип формату\": [mp4\", \"mov\"]}}, \"опис відео\": \"тип\": \"рядок\", \"додаткове\": \"ім'я\": \"Відео\" Підпис\\\",\\\"тип\\\":\\\"рядок\\\",\\\"обов'язковий\\\":false,\\\"допустимий символ\\\":{\\\"увімкнено\\\":true,\\\"значення\\\":1000},\\\"багаторядковий\\\":{\\\"увімкнено\\\":true,\\\"значення\\\":3},\\\"значення за замовчуванням\\\":{\\\"увімкнено\\\":false},\\\"індекс\\\":2}},\\\"управління_обкладинкою\\\":{\\\"тип\\\":\\\"зображення\\\",\\\"додатковий\\\":{\\\"назва\\\":\\\"Обкладинка Зображення\\\", \"тип\\\":\\\"зображення\\\", \"обов'язкове\\\":false, \"значення за замовчуванням\\\":{\\\"увімкнено\\\":false}, \"індекс\\\":3, \"ліміт розміру\\\":{\\\"значення\\\":5, \"одиниця\\\":\\\"МБ\\\"}, \"тип формату\\\":[\\\"jpg\\\",\\\"png\\\",\\\"jpeg\\\"]}}, \"enableAIGC\\\":{\\\"тип\\\":\\\"логічне\\\",\\\"додаткове\\\":{\\\"назва\\\":\\\"Мітка ШІ\\\",\\\"тип\\\":\\\"логічне\\\",\\\"обов'язкове\\\":false, \"значення за замовчуванням\\\":{\\\"увімкнено\\\":false},\\\"індекс\\\":4}}, \"ідентифікатор_продукту\\\":{\\\"тип\\\":\\\"рядок\\\",\\\"додаткове\\\":{\\\"назва\\\":\\\"Продукт ID\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":50},\\\"placeholder\\\":\\\"Ідентифікатор продукту підтримує лише цифри, максимум 50 символів.\\\",\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":5}},\\\"productTitle\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Назва продукту\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":30},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":6}},\\\"getLeads\\\":{\\\"type\\\":\\\"boolean\\\",\\\"extra\\\":{\\\"name\\\":\\\"Отримати Leads\\\",\\\"type\\\":\\\"boolean\\\",\\\"required\\\":false,\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":7}},\\\"comment\\\":{\\\"type\\\":\\\"string\\\",\\\"extra\\\":{\\\"name\\\":\\\"Comment\\\",\\\"type\\\":\\\"string\\\",\\\"required\\\":false,\\\"charValid\\\":{\\\"enabled\\\":true,\\\"value\\\":200},\\\"multiline\\\":{\\\"enabled\\\":true,\\\"value\\\":3},\\\"defaultValue\\\":{\\\"enabled\\\":false},\\\"index\\\":8}}}\"\n```\n\n- __Крок 2: Створення параметра JSON__\nСтворіть об'єкт JSON відповідно до вимог до параметра:\n```json\n{\n\"__Extra__\": {\n\"videoDownloadUrl\": {\n\"name\": \"video_name.mp4\",\n\"size\": 204800000\n}\n},\n\"videoDownloadUrl\": \"morelogin://cloudfile?ids=1,2\"\n}\n```\n- __Крок 3: Екранування рядка JSON__\nКонвертуйте об'єкт JSON у формат екранованого рядка:\n```json\n\"{\\\"__Extra__\\\": {\\\"videoDownloadUrl\\\": {\\\"name\\\": \\\"video_name.mp4\\\",\\\"size\\\": 204800000}},\\\"videoDownloadUrl\\\": \\\"morelogin://cloudfile?ids=1,2\\\"}\"\n```\n- __Крок 4: Виклик API__\nПередайте екранований рядок як значення параметра `templateParameter` до цільового API.\n\nЗадокументовані бізнес-помилки: `33814`, `33818`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cloudPhoneId": {
                    "type": "string",
                    "description": "Ідентифікатор хмарного телефону"
                  },
                  "scheduleName": {
                    "type": "string",
                    "description": "Назва розкладу"
                  },
                  "templateId": {
                    "type": "string",
                    "description": "Ідентифікатор шаблону, персональний шаблон або ідентифікатор ринкового шаблону"
                  },
                  "templateParameter": {
                    "type": "string",
                    "description": "Параметри шаблону визначено в особистих шаблонах або шаблонах ринку. Параметри в шаблоні визначено так:{\"Test\":{\"extra\":{\"type\":\"string\",\"required\":true,\"multiline\":{\"enabled\":false},\"name\":\"Test\",\"index\":1},\"type\":\"string\"}}. Під час запиту параметрів передається параметр:{\"Test\":\"xxxx\"}"
                  },
                  "description": {
                    "type": "string",
                    "description": "Опис розкладу"
                  }
                },
                "required": [
                  "cloudPhoneId",
                  "scheduleName",
                  "templateId"
                ]
              },
              "example": {
                "cloudPhoneId": "16783319661123",
                "scheduleName": "test",
                "templateId": "1678347487160256",
                "templateParameter": "{\"keyword\": \"abc\"}",
                "description": "опис розкладу"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — одне значення типу integer.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "integer",
                      "description": "Ідентифікатор розкладу"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": 1
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/task/cancel": {
      "post": {
        "operationId": "cloudphoneRpaTaskCancelPost",
        "summary": "Скасувати розклад",
        "deprecated": false,
        "description": "Скасовує розклад RPA і всі його незавершені запуски.\n- **Передумови**: розклад має існувати в команді. Завершений розклад скасувати неможливо; уже скасований повертає успіх і нічого не робить.\n- **Ефект**: розклад позначається скасованим **синхронно**, а для кожного запуску у стані очікування, виконання або перевірки в чергу ставиться запит на скасування.\n- **Завершення**: змішане. Стан розкладу читайте з `/cloudphone/rpa/task/page`, а окремі запуски підтверджуйте через `/cloudphone/rpa/subTask/page`: уже виконуваний запуск зупиняється асинхронно, а не відразу.\n- **Повтор**: ідемпотентний.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор плану"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/subTask/page": {
      "post": {
        "operationId": "cloudphoneRpaSubTaskPagePost",
        "summary": "Запис виконання завдань запитів сторінок",
        "deprecated": false,
        "description": "Посторінково виводить окремі запуски RPA.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Значення статусу**: `taskState` дорівнює `0` очікування, `1` виконується, `2` у черзі, `3` успішно, `4` помилка, `5` скасовано. Очікування й чергу розрізняють за тим, чи перебуває запуск досі на своєму початковому часі спрацювання.\n- **Особливість пошуку**: пошук за заголовком шаблону спершу розв'язує заголовки мовою поточного запиту, тому заголовок, який не збігається з цією мовою, поверне порожню сторінку, а не всі запуски.",
        "tags": [
          "Schedules"
        ],
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор завдання"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва завдання",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Стан плану; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор шаблону",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ідентифікатор хмарного телефону",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва хмарного телефону",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час початку завдання за часовим поясом UTC+0",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час завершення завдання за часовим поясом UTC+0",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "pageNo": 1,
                "pageSize": 10
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data.dataList` містить записи запитаної сторінки та є порожнім масивом за відсутності відповідників; `data.total`, `data.current` і `data.pages` описують нумерацію сторінок.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "dataList": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ExecutionDTO"
                          }
                        },
                        "current": {
                          "type": "string",
                          "description": "Номер поточної сторінки"
                        },
                        "pages": {
                          "type": "string",
                          "description": "Загальна кількість сторінок"
                        },
                        "total": {
                          "type": "string",
                          "description": "Загальна кількість"
                        }
                      },
                      "required": [
                        "current",
                        "dataList",
                        "pages",
                        "total"
                      ]
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "dataList": [
                      {
                        "id": "1673823102599682",
                        "taskName": "example-name",
                        "taskState": 1,
                        "cloudPhoneId": "1673823102599682",
                        "cloudPhoneName": "example-name",
                        "templateName": "example-name",
                        "handleFailCode": "string",
                        "handleFailReason": "string",
                        "handleResult": 1,
                        "handleResultAttachment": "string",
                        "handleTime": "2026-09-01 12:00:00",
                        "endTime": "2026-09-01 12:00:00",
                        "powerOnTime": "2026-09-01 12:00:00",
                        "triggerNextTime": "2026-09-01 12:00:00",
                        "triggerTime": "2026-09-01 12:00:00",
                        "createDate": "2026-09-01 12:00:00",
                        "createMember": "string",
                        "updateDate": "2026-09-01 12:00:00",
                        "updateMember": "2026-09-01 12:00:00"
                      }
                    ],
                    "current": "1",
                    "pages": "1",
                    "total": "1"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/subTask/detail/{id}": {
      "post": {
        "operationId": "cloudphoneRpaSubTaskDetailIdPost",
        "summary": "Отримати виконання завдання",
        "deprecated": false,
        "description": "Повертає відомості про один запуск RPA.\n- **Передумови**: запуск має належати вашій команді. Виклик завершується помилкою, якщо запуску, його розкладу або його хмарного телефона більше не існує.\n- **Ефект**: відсутній. Лише читання. Повтор безпечний з обмеженою витримкою.\n- **Значення статусу**: та сама шкала, що й у `/cloudphone/rpa/subTask/page`.\n- **Примітка**: дані проксі розв'язуються навіть для проксі, які з того часу було видалено, тому історичний запуск і далі показує, який проксі використовувався.",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Ідентифікатор завдання виконання",
            "required": true,
            "example": 1678919049331331,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taskId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор завдання"
                  },
                  "taskName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва завдання",
                    "maxLength": 255,
                    "minLength": 1
                  },
                  "taskState": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "Стан плану; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати",
                    "maximum": 9,
                    "minimum": 0
                  },
                  "templateId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Ідентифікатор шаблону",
                    "maximum": 99999999999,
                    "minimum": 0
                  },
                  "templateTitle": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва шаблону",
                    "maxLength": 255,
                    "minLength": 0
                  },
                  "cloudPhoneId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ідентифікатор хмарного телефону",
                    "example": "1559133625483282"
                  },
                  "cloudPhoneName": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Назва хмарного телефону",
                    "maxLength": 100,
                    "minLength": 0
                  },
                  "beginTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час початку завдання за часовим поясом UTC+0",
                    "example": "2025-01-01 23:59:59"
                  },
                  "endTime": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Час завершення завдання за часовим поясом UTC+0",
                    "example": "2025-01-02 23:59:59"
                  },
                  "pageNo": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 1",
                    "example": 1
                  },
                  "pageSize": {
                    "type": [
                      "integer",
                      "null"
                    ],
                    "description": "За замовчуванням: 10"
                  }
                }
              },
              "example": {
                "taskId": null,
                "taskName": null,
                "taskState": null
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` — об'єкт із полями `id`, `taskName`, `taskState`, `cloudPhoneId`, `cloudPhoneName`, `templateName`, ….",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "description": "Ідентифікатор запису виконання"
                        },
                        "taskName": {
                          "type": "string",
                          "description": "Назва завдання запланувати"
                        },
                        "taskState": {
                          "type": "integer",
                          "description": "Стан розкладу; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати"
                        },
                        "cloudPhoneId": {
                          "type": "string",
                          "description": "Ідентифікатор хмарного телефону"
                        },
                        "cloudPhoneName": {
                          "type": "string",
                          "description": "Назва хмарного телефону"
                        },
                        "templateName": {
                          "type": "string",
                          "description": "Назва шаблону"
                        },
                        "handleFailCode": {
                          "type": "string",
                          "description": "Код помилки завдання"
                        },
                        "handleFailReason": {
                          "type": "string",
                          "description": "Причина невдачі завдання"
                        },
                        "handleResult": {
                          "type": "integer",
                          "description": "Результат завдання. 0: невдача; 1: успішне виконання"
                        },
                        "handleResultAttachment": {
                          "type": "string",
                          "description": "Додаток до результату виконання завдання"
                        },
                        "handleTime": {
                          "type": "string",
                          "description": "Час виконання"
                        },
                        "endTime": {
                          "type": "string",
                          "description": "Час завершення завдання"
                        },
                        "powerOnTime": {
                          "type": "string",
                          "description": "Час увімкнення хмарного телефону"
                        },
                        "triggerNextTime": {
                          "type": "string",
                          "description": "Наступний запланований час запуску"
                        },
                        "triggerTime": {
                          "type": "string",
                          "description": "Запланований час запуску"
                        },
                        "createDate": {
                          "type": "string",
                          "description": "Час створення"
                        },
                        "createMember": {
                          "type": "string",
                          "description": "Творець"
                        },
                        "updateDate": {
                          "type": "string",
                          "description": "Час останнього оновлення"
                        },
                        "updateMember": {
                          "type": "string",
                          "description": "Останній оновлювач"
                        }
                      }
                    }
                  },
                  "required": [
                    "code",
                    "msg",
                    "data",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": {
                    "id": "1673823102599682",
                    "taskName": "example-name",
                    "taskState": 1,
                    "cloudPhoneId": "1673823102599682",
                    "cloudPhoneName": "example-name",
                    "templateName": "example-name",
                    "handleFailCode": "string",
                    "handleFailReason": "string",
                    "handleResult": 1,
                    "handleResultAttachment": "string",
                    "handleTime": "2026-09-01 12:00:00",
                    "endTime": "2026-09-01 12:00:00",
                    "powerOnTime": "2026-09-01 12:00:00",
                    "triggerNextTime": "2026-09-01 12:00:00",
                    "triggerTime": "2026-09-01 12:00:00",
                    "createDate": "2026-09-01 12:00:00",
                    "createMember": "string",
                    "updateDate": "2026-09-01 12:00:00",
                    "updateMember": "2026-09-01 12:00:00"
                  }
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/rpa/subTask/cancel/{id}": {
      "post": {
        "operationId": "cloudphoneRpaSubTaskCancelIdPost",
        "summary": "Скасувати виконання",
        "deprecated": false,
        "description": "Скасовує один запуск RPA, не торкаючись його розкладу.\n- **Передумови**: запис про запуск має існувати в команді. Завершений запуск скасувати неможливо; уже скасований повертає успіх і нічого не робить.\n- **Ефект**: **лише ставить запит на скасування в чергу — цей виклик не записує жодного стану.** Розклад продовжує працювати, наступні запуски не змінюються. Щоб зупинити сам розклад, використовуйте `/cloudphone/rpa/task/cancel`.\n- **Завершення**: асинхронне. Опитуйте `/cloudphone/rpa/subTask/page` або відомості про запуск, доки стан не стане «скасований». Уже виконуваний запуск не зупиняється миттєво.\n- **Повтор**: ідемпотентний; повтор лише знову ставить запит у чергу.",
        "tags": [
          "Schedules"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "Ідентифікатор плану"
                  }
                },
                "required": [
                  "id"
                ]
              },
              "example": {
                "id": "1678919049331329"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Успіх. `data` для цієї операції завжди null; результат передається через `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "integer",
                      "description": "Код відповіді, 0 означає успіх, >0 означає невдачу"
                    },
                    "msg": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Повідомлення про помилку"
                    },
                    "requestId": {
                      "type": "string",
                      "description": "Ідентифікатор трасування запиту"
                    },
                    "data": {
                      "type": "null"
                    }
                  },
                  "required": [
                    "code",
                    "data",
                    "msg",
                    "requestId"
                  ]
                },
                "example": {
                  "code": 0,
                  "msg": null,
                  "requestId": "0d8b6f1c-9f4e-4d02-9d1a-7c3f5a1b2c3d",
                  "data": null
                }
              }
            },
            "headers": {}
          }
        }
      }
    },
    "/cloudphone/touch/click": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Натискання",
        "description": "Натискає точку на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Координати**: `pos` має містити рівно два значення, `[x, y]`. **Вони не звіряються з роздільністю екрана** — точка за межами екрана передається Сервісу як є.\n- **Завершення**: синхронне. `data.status` дорівнює `finish`, коли жест виконано, або `pending`, коли Сервіс поставив його в чергу. Деякі моделі завжди повідомляють `finish`. Ендпоінта для опитування жесту у стані `pending` немає.\n- **Повтор**: дедуплікації немає. Два виклики — це два натискання, тому наосліп повторений запит після таймауту може дати подвійне натискання.\n- **Примітка**: `duration` тут приймається, але ігнорується; його читає лише довге натискання.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/doubleClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Подвійне натискання",
        "description": "Виконує подвійне натискання точки на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Ефект**: На деяких моделях це емулюється чотирма дотиками з фіксованими інтервалами 50/100/50 мс, тому ритм натискань не налаштовується. `duration` ігнорується.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`, як за одиночного натискання.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає подвійне натискання.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchDoubleClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/longClick": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Тривале натискання",
        "description": "Виконує довге натискання точки на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Значення**: `duration` — час утримання в мілісекундах, максимум 60000. **Нижньої межі немає**, тому відʼємне значення проходить валідацію й передається Сервісу. На деяких моделях за відсутності `duration` використовується 1000 мс.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає натискання.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchLongClick",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchClickRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos": [
                  540,
                  960
                ],
                "duration": 2000
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/swipe": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Свайп",
        "description": "Виконує свайп між двома точками на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Значення**: `pos1` — початкова точка, `pos2` — кінцева, кожна рівно `[x, y]`. `duration` — час жесту в мілісекундах, максимум 60000; На деяких моделях за замовчуванням 300 мс, а траєкторія інтерполюється у пʼять проміжних подій переміщення.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає свайп.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchSwipe",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  540,
                  1500
                ],
                "pos2": [
                  540,
                  500
                ],
                "duration": 300
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/cloudphone/touch/drag": {
      "post": {
        "tags": [
          "Touch"
        ],
        "summary": "Дотик - Перетягування",
        "description": "Виконує перетягування між двома точками на екрані хмарного телефона.\n- **Передумови**: хмарний телефон повинен бути увімкнений і не може бути зайнятий іншим учасником команди. Підтримується лише на сумісних моделях; решта Сервісів відхиляють виклик.\n- **Примітка**: **На деяких моделях це та сама реалізація, що й свайп** — служба передає перетягування прямо в процедуру свайпа, тому там їх неможливо розрізнити. В інших моделей є окрема дія перетягування.\n- **Завершення**: синхронне. `data.status` дорівнює `finish` або `pending`.\n- **Повтор**: дедуплікації немає; повторний виклик знову виконає перетягування.\n\nЗадокументовані бізнес-помилки: `33300`, `33301`, `33401`. Значення кодів див. у [Error Codes](../Getting%20Started/error-codes.md). Будь-яка операція може додатково повернути загальні коди.",
        "operationId": "touchDrag",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TouchSwipeRequest"
              },
              "example": {
                "id": "1558968155668507",
                "pos1": [
                  200,
                  500
                ],
                "pos2": [
                  800,
                  500
                ],
                "duration": 500
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Операція виконана успішно",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TouchResultResponse"
                },
                "example": {
                  "code": 0,
                  "msg": "success",
                  "data": {
                    "status": "finish"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "Authorization": {
        "type": "http",
        "description": "Значення поля access_token з відповіді інтерфейсу отримання токена доступу",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "schemas": {
      "ResponseDataPageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Код статусу, 0 означає успіх",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Опис",
            "example": "Success"
          },
          "data": {
            "description": "Дані відповіді",
            "$ref": "#/components/schemas/PageResultCloudPhoneAppDto"
          }
        }
      },
      "PageResultCloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "total": {
            "type": "string",
            "description": "Загальна кількість записів",
            "example": "15"
          },
          "current": {
            "type": "string",
            "description": "Номер поточної сторінки",
            "example": "1"
          },
          "pages": {
            "type": "string",
            "description": "Загальна кількість сторінок",
            "example": "2"
          },
          "dataList": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CloudPhoneAppDto"
            },
            "description": "Список застосунків команди"
          }
        }
      },
      "CloudPhoneAppDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Ідентифікатор запису",
            "example": "123456"
          },
          "appName": {
            "type": "string",
            "description": "Назва застосунку",
            "example": "Facebook"
          },
          "packageName": {
            "type": "string",
            "description": "Ім'я пакета Android",
            "example": "com.facebook.katana"
          },
          "versionName": {
            "type": "string",
            "description": "Відображувана назва версії",
            "example": "450.0.0.1"
          },
          "versionCode": {
            "type": "string",
            "description": "Код версії",
            "example": "450000000"
          },
          "enabled": {
            "type": "boolean",
            "description": "Чи увімкнено додаток",
            "example": true
          },
          "desc": {
            "type": "string",
            "description": "Опис додатка",
            "example": "Social media application"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "Чи увімкнено ROOT-доступ для додатка",
            "example": false
          }
        }
      },
      "ApiAppRootOperateDto": {
        "type": "object",
        "required": [
          "id",
          "packageNames"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "12345678"
          },
          "packageNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Список імен пакетів застосунків, яким дозволено ROOT",
            "example": [
              "com.test"
            ]
          }
        }
      },
      "CloudPhoneSetProxyApiDto": {
        "type": "object",
        "properties": {
          "ids": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Список ідентифікаторів середовищ хмарних телефонів",
            "example": [
              "1558968155668507"
            ]
          },
          "uniqueIds": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "Список відображуваних порядкових номерів середовищ хмарних телефонів (використовується для звірки, якщо envIds не передано)",
            "example": [
              1001
            ]
          },
          "proxy": {
            "description": "Налаштування проксі",
            "$ref": "#/components/schemas/CloudPhoneProxyDto"
          }
        }
      },
      "CloudPhoneProxyDto": {
        "type": "object",
        "required": [
          "proxyIp",
          "proxyPort",
          "proxyProvider"
        ],
        "properties": {
          "proxyId": {
            "type": "string",
            "description": "Ідентифікатор конфігурації проксі (значення більше 0 означає повторне використання наявної конфігурації; порожнє значення або <=0 означає створення/оновлення проксі за наступними докладними параметрами)",
            "example": "10002"
          },
          "proxyIp": {
            "type": "string",
            "description": "IP-адреса проксі-сервера",
            "example": "192.168.1.100"
          },
          "proxyPort": {
            "type": "integer",
            "description": "Порт проксі-сервера",
            "minimum": 1,
            "maximum": 65535,
            "example": 8080
          },
          "proxyName": {
            "type": "string",
            "maxLength": 600,
            "description": "Назва/опис конфігурації проксі",
            "example": "test_proxy_01"
          },
          "proxyProvider": {
            "type": "integer",
            "description": "Тип проксі 0:http, 1:https, 2:socks5",
            "example": 2
          },
          "username": {
            "type": "string",
            "maxLength": 200,
            "description": "Ім'я користувача для автентифікації проксі",
            "example": "admin"
          },
          "password": {
            "type": "string",
            "maxLength": 100,
            "description": "Пароль для автентифікації проксі",
            "example": "pwd123"
          },
          "refreshUrl": {
            "type": "string",
            "description": "URL API для оновлення IP динамічного проксі",
            "example": "http://api.proxy.com/refresh"
          },
          "country": {
            "type": "string",
            "description": "Код країни розташування проксі (наприклад, CN, US)",
            "example": "US"
          },
          "state": {
            "type": "string",
            "description": "Область/штат розташування проксі",
            "example": "California"
          },
          "city": {
            "type": "string",
            "description": "Місто розташування проксі",
            "example": "Los Angeles"
          }
        }
      },
      "CloudPhoneEnableRootApiDTO": {
        "type": "object",
        "required": [
          "id",
          "enableRoot"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "1558968155668507"
          },
          "enableRoot": {
            "type": "boolean",
            "description": "Чи вмикати глобальні ROOT-права на рівні системи",
            "example": true
          }
        }
      },
      "CloudPhoneProfile": {
        "type": "object",
        "properties": {
          "abnormalStatus": {
            "type": "integer",
            "description": "Аномальний статус 0 – Без аномалій 1 – Неактивовано 2 – Поза контрактом 3 – Перепродано 4 – Деактивовано"
          },
          "adbInfo": {
            "$ref": "#/components/schemas/AdbInfo"
          },
          "billingType": {
            "type": "integer",
            "description": "Оплата: 0 – безкоштовно, 1 – гнучка підписка, 2 – щомісячна"
          },
          "createDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMember": {
            "type": "integer"
          },
          "createMemberName": {
            "type": "string"
          },
          "enableAdb": {
            "type": "boolean"
          },
          "envName": {
            "type": "string",
            "description": "Назва хмарного телефону"
          },
          "envRemark": {
            "type": "string",
            "description": "Примітки до профілю"
          },
          "envStatus": {
            "type": "integer",
            "description": "Стан профілю: 0 – Новий 1 – Створення не вдалося 2 – Зупинено 3 – Запуск 4 – Старт 5 – Виконується скидання"
          },
          "expireTime": {
            "type": "string",
            "description": "термін дії"
          },
          "groupId": {
            "type": "string"
          },
          "groupName": {
            "description": "Назва групи. Null, якщо хмарний телефон не належить до жодної групи",
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "androidId": {
            "type": "string",
            "description": "android id хмарного телефона"
          },
          "gaid": {
            "type": "string",
            "description": "gaid хмарного телефону"
          },
          "lastConnectDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "type": "string"
          },
          "lastConnectMemberName": {
            "type": "string"
          },
          "lastStartDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastStartMemberId": {
            "type": "string"
          },
          "lastStartMemberName": {
            "type": "string"
          },
          "proxy": {
            "$ref": "#/components/schemas/ProxyInfo"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "Стан проксі-сервера: 0 – Не виявлено 1 – Виявлення 2 – Виявлення не вдалося 3 – Виявлення успішне"
          },
          "supportAdb": {
            "type": "boolean"
          },
          "tagInfos": {
            "description": "Відомості про теги. Порожній масив, якщо теги не призначено",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Ідентифікатор тегу",
                  "type": "string"
                },
                "tagName": {
                  "description": "Назва тегу",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "updateDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "updateMember": {
            "type": "integer"
          }
        }
      },
      "AdbInfo": {
        "type": "object",
        "properties": {
          "adbIp": {
            "type": "string",
            "description": "IP-адреса adb"
          },
          "adbPassword": {
            "type": "string",
            "description": "пароль підключення adb"
          },
          "adbPort": {
            "type": "string",
            "description": "порт adb"
          },
          "remark": {
            "type": "string",
            "description": "Інформація про примітки щодо несправностей"
          },
          "success": {
            "type": "integer",
            "description": "Успішне придбання 1=Так 0=Ні"
          }
        },
        "required": [
          "adbIp",
          "adbPassword",
          "adbPort",
          "remark",
          "success"
        ]
      },
      "ProxyInfo": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string"
          },
          "countryCode": {
            "type": "string"
          },
          "createDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "delFlag": {
            "type": "integer",
            "description": "1 – видалено 2 – не видалено"
          },
          "expiryTime": {
            "type": "string"
          },
          "exportIp": {
            "type": "string"
          },
          "groupId": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "providerCode": {
            "type": "string"
          },
          "proxyAreaCode": {
            "type": "string"
          },
          "proxyCatagoryType": {
            "type": "integer",
            "description": "Тип проксі-сервера: 0: група сайтів 1: хмарна платформа 2: власна IP-адреса 3: VPS 4: віртуальна машина"
          },
          "proxyCheckStatus": {
            "type": "integer",
            "description": "Стан виявлення: 0: очікує виявлення 1: успішне виявлення 2: невдача виявлення 3: невідома помилка"
          },
          "proxyInfo": {
            "type": "string"
          },
          "proxyIp": {
            "type": "string"
          },
          "proxyName": {
            "type": "string"
          },
          "proxyPort": {
            "type": "integer"
          },
          "proxyRegionCode": {
            "type": "string"
          },
          "proxyStatus": {
            "type": "integer",
            "description": "0 – Звичайний 1 – Очікує розподілу 2 – Оновлення 3 – Термін дії минув"
          },
          "proxySub": {
            "$ref": "#/components/schemas/ProxySubscription"
          },
          "proxyType": {
            "type": "integer",
            "description": "Тип проксі-сервера: 0-http 1-https 2-socks5 4-Oxylabs 5-Proxys.io 6-GeoSurf 9-Oxylabsauto 10-Trogan 11-Shadowsocks 12-vmess"
          },
          "proxyTypeCode": {
            "type": "string"
          },
          "regionKey": {
            "type": "string"
          },
          "releaseTime": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$",
            "description": "Час випуску: час видалення, якщо видалено, час закінчення терміну дії, якщо минув"
          },
          "uniqueId": {
            "type": "integer"
          }
        },
        "required": [
          "country",
          "countryCode",
          "createDate",
          "delFlag",
          "expiryTime",
          "exportIp",
          "groupId",
          "id",
          "providerCode",
          "proxyAreaCode",
          "proxyCatagoryType",
          "proxyCheckStatus",
          "proxyInfo",
          "proxyIp",
          "proxyName",
          "proxyPort",
          "proxyRegionCode",
          "proxyStatus",
          "proxySub",
          "proxyType",
          "proxyTypeCode",
          "regionKey",
          "releaseTime",
          "uniqueId"
        ]
      },
      "ProxySubscription": {
        "type": "object",
        "properties": {
          "activeRecordId": {
            "type": "string"
          },
          "businessId": {
            "type": "string"
          },
          "createMember": {
            "type": "integer"
          },
          "endTime": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "nextBillingTime": {
            "type": "string"
          },
          "startTime": {
            "type": "string"
          },
          "subPayMethod": {
            "type": "string"
          },
          "subStatus": {
            "type": "integer",
            "description": "Статус підписки: 0 – Очікує розгляду 1 – Підписано 2 – Скасовано"
          },
          "subType": {
            "type": "integer",
            "description": "Тип підписки: 1 агент, 2 пакети"
          },
          "teamId": {
            "type": "string"
          }
        },
        "required": [
          "activeRecordId",
          "businessId",
          "createMember",
          "endTime",
          "id",
          "nextBillingTime",
          "startTime",
          "subPayMethod",
          "subStatus",
          "subType",
          "teamId"
        ]
      },
      "CloudPhoneDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "androidId": {
            "type": "string",
            "description": "android id хмарного телефона"
          },
          "gaid": {
            "type": "string",
            "description": "gaid хмарного телефону"
          },
          "envName": {
            "type": "string"
          },
          "groupId": {
            "type": "string"
          },
          "groupName": {
            "description": "Назва групи. Null, якщо хмарний телефон не належить до жодної групи",
            "type": [
              "string",
              "null"
            ]
          },
          "skuId": {
            "type": "string"
          },
          "tagInfos": {
            "description": "Відомості про теги. Порожній масив, якщо теги не призначено",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Ідентифікатор тегу",
                  "type": "string"
                },
                "tagName": {
                  "description": "Назва тегу",
                  "type": "string"
                }
              },
              "required": [
                "id",
                "tagName"
              ]
            }
          },
          "billingType": {
            "type": "integer"
          },
          "proxyStatus": {
            "type": "integer"
          },
          "settings": {
            "type": "object",
            "properties": {
              "automaticGeo": {
                "type": "boolean"
              },
              "automaticLocation": {
                "type": "boolean"
              },
              "automaticLanguage": {
                "type": "boolean"
              },
              "longitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "latitude": {
                "type": [
                  "number",
                  "null"
                ]
              }
            },
            "required": [
              "automaticGeo",
              "automaticLocation",
              "automaticLanguage",
              "longitude",
              "latitude"
            ]
          },
          "device": {
            "type": "object",
            "properties": {
              "server": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "countryName": {
                "type": "string"
              },
              "rom": {
                "type": "integer"
              },
              "wifiBssid": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "bluetoothMac": {
                "type": "string"
              }
            },
            "required": [
              "server",
              "countryName",
              "rom",
              "wifiBssid",
              "bluetoothMac"
            ]
          },
          "proxy": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "proxyName": {
                "type": "string"
              },
              "proxyIp": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "proxyName",
              "proxyIp"
            ]
          },
          "lastStartMemberId": {
            "type": "string"
          },
          "lastStartMemberName": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastStartDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "lastConnectMemberId": {
            "type": "string"
          },
          "lastConnectMemberName": {
            "type": [
              "string",
              "null"
            ]
          },
          "lastConnectDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "envStatus": {
            "type": "integer"
          },
          "abnormalStatus": {
            "type": "integer"
          },
          "expireTime": {
            "type": "string"
          },
          "envRemark": {
            "type": "string"
          },
          "createMember": {
            "type": "string"
          },
          "updateMember": {
            "type": "string"
          },
          "updateDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createDate": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$"
          },
          "createMemberName": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "envName",
          "groupId",
          "skuId",
          "tagInfos",
          "billingType",
          "proxyStatus",
          "settings",
          "device",
          "proxy",
          "lastStartMemberId",
          "lastStartMemberName",
          "lastStartDate",
          "lastConnectMemberId",
          "lastConnectMemberName",
          "lastConnectDate",
          "envStatus",
          "abnormalStatus",
          "expireTime",
          "envRemark",
          "createMember",
          "updateMember",
          "updateDate",
          "createDate",
          "createMemberName"
        ]
      },
      "ApiBatchAdbInfoDto": {
        "type": "object",
        "required": [
          "envIds"
        ],
        "properties": {
          "envIds": {
            "type": "array",
            "description": "Список ідентифікаторів середовищ, максимум 200",
            "maxItems": 200,
            "minItems": 1,
            "items": {
              "type": "string"
            },
            "example": [
              "1674380838117474",
              "1675787900043353"
            ]
          }
        }
      },
      "ApiBatchAdbInfoResultDto": {
        "type": "object",
        "description": "Результат пакетного запиту ADB-інформації",
        "properties": {
          "id": {
            "type": "string",
            "description": "Ідентифікатор середовища"
          },
          "supportAdb": {
            "type": "boolean",
            "description": "Чи підтримується ADB"
          },
          "enableAdb": {
            "type": "boolean",
            "description": "Увімкнення ADB: 0 = вимкнено, 1 = увімкнено"
          },
          "envStatus": {
            "type": "integer",
            "description": "Статус середовища:\n- 0: нове\n- 1: помилка створення\n- 2: вимкнено\n- 3: запускається\n- 4: увімкнено\n- 5: скидається\n- 6: перезапускається\n- 7: виконується зміна пристрою одним клацанням"
          },
          "adbIp": {
            "type": [
              "string",
              "null"
            ],
            "description": "IP-адреса ADB-підключення"
          },
          "adbPassword": {
            "type": [
              "string",
              "null"
            ],
            "description": "Пароль ADB-підключення"
          },
          "adbPort": {
            "type": [
              "string",
              "null"
            ],
            "description": "Порт ADB-підключення"
          },
          "command": {
            "type": [
              "string",
              "null"
            ],
            "description": "Команда підключення ADB через SSH-тунель"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Термін дії ADB-підключення"
          },
          "remark": {
            "type": [
              "string",
              "null"
            ],
            "description": "Примітка. Якщо ADB-інформацію отримати не вдалося, зазначається причина:\n- середовище не існує\n- середовище не увімкнено, ADB-інформацію запитати неможливо\n- це середовище не підтримує ADB\n- не вдалося отримати ADB-інформацію"
          }
        }
      },
      "ResponseDataListApiBatchAdbInfoResultDto": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Код відповіді, 0 означає успіх",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Повідомлення відповіді",
            "example": "success"
          },
          "data": {
            "type": "array",
            "description": "Список ADB-інформації в тому самому порядку, що й запитані envIds",
            "items": {
              "$ref": "#/components/schemas/ApiBatchAdbInfoResultDto"
            }
          }
        }
      },
      "ExecutionDTO": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Ідентифікатор запису виконання"
          },
          "taskName": {
            "type": "string",
            "description": "Назва завдання запланувати"
          },
          "taskState": {
            "type": "integer",
            "description": "Стан розкладу; 0: очікує виконання; 1: Виконується; 2: Виконання завершено; 3: Скасувати"
          },
          "cloudPhoneId": {
            "type": "string",
            "description": "Ідентифікатор хмарного телефону"
          },
          "cloudPhoneName": {
            "type": "string",
            "description": "Назва хмарного телефону"
          },
          "templateName": {
            "type": "string",
            "description": "Назва шаблону"
          },
          "handleFailCode": {
            "type": "string",
            "description": "Код помилки завдання"
          },
          "handleFailReason": {
            "type": "string",
            "description": "Причина невдачі завдання"
          },
          "handleResult": {
            "type": "integer",
            "description": "Результат завдання. 0: невдача; 1: успішне виконання"
          },
          "handleResultAttachment": {
            "type": "string",
            "description": "Додаток до результату виконання завдання"
          },
          "handleTime": {
            "type": "string",
            "description": "Час виконання"
          },
          "endTime": {
            "type": "string",
            "description": "Час завершення завдання"
          },
          "powerOnTime": {
            "type": "string",
            "description": "Час увімкнення хмарного телефону"
          },
          "triggerNextTime": {
            "type": "string",
            "description": "Наступний запланований час запуску"
          },
          "triggerTime": {
            "type": "string",
            "description": "Запланований час запуску"
          },
          "createDate": {
            "type": "string",
            "description": "Час створення"
          },
          "createMember": {
            "type": "string",
            "description": "Творець"
          },
          "updateDate": {
            "type": "string",
            "description": "Час останнього оновлення"
          },
          "updateMember": {
            "type": "string",
            "description": "Останній оновлювач"
          }
        }
      },
      "TouchClickRequest": {
        "type": "object",
        "required": [
          "id",
          "pos"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "1558968155668507"
          },
          "pos": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Координати натискання [x, y]. Система координат використовує лівий верхній кут екрана як початок координат (0, 0).",
            "example": [
              540,
              960
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Тривалість натискання в мілісекундах (використовується для тривалого натискання). Якщо не вказано, використовується значення за замовчуванням.",
            "example": 2000
          }
        }
      },
      "TouchSwipeRequest": {
        "type": "object",
        "required": [
          "id",
          "pos1",
          "pos2"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID хмарного телефону",
            "example": "1558968155668507"
          },
          "pos1": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Початкові координати [x, y]",
            "example": [
              540,
              1500
            ]
          },
          "pos2": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 2,
            "maxItems": 2,
            "description": "Кінцеві координати [x, y]",
            "example": [
              540,
              500
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Тривалість свайпу/перетягування в мілісекундах. Більше значення призводить до повільнішої дії.",
            "example": 300
          }
        }
      },
      "TouchResultResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "integer",
            "description": "Код статусу, 0 означає успіх",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Повідомлення відповіді",
            "example": "success"
          },
          "data": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "description": "Статус виконання",
                "example": "finish"
              }
            }
          }
        }
      },
      "ResponseEnvelopeBase": {
        "type": "object",
        "required": [
          "code",
          "msg",
          "requestId"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "Business result code; `0` indicates success",
            "example": 0
          },
          "msg": {
            "type": [
              "string",
              "null"
            ],
            "description": "Error message; null when successful",
            "example": null
          },
          "requestId": {
            "type": "string",
            "description": "Request ID for troubleshooting",
            "example": "1d4f3ea968664593860b94b35d4ebf5e"
          }
        }
      },
      "MonthlyCloudPhoneSkuPrice": {
        "type": "object",
        "required": [
          "price",
          "period",
          "periodUnit"
        ],
        "properties": {
          "price": {
            "type": "integer",
            "minimum": 0,
            "description": "Configured price in US cents"
          },
          "period": {
            "type": "integer",
            "description": "Billing-period count returned by the product service"
          },
          "periodUnit": {
            "type": "string",
            "description": "Localized billing-period unit returned by the product service"
          },
          "priceDesc": {
            "type": [
              "string",
              "null"
            ],
            "description": "Localized display price, when configured"
          }
        }
      },
      "MonthlyCloudPhoneSku": {
        "type": "object",
        "required": [
          "skuId",
          "skuName",
          "prices"
        ],
        "properties": {
          "skuId": {
            "type": "string",
            "description": "Monthly Cloud Phone product ID"
          },
          "skuName": {
            "type": "string",
            "description": "Product name returned in the product-service language"
          },
          "cloudPhoneAndroidVersion": {
            "type": [
              "string",
              "null"
            ],
            "description": "Android version, or null when the product has no configured value"
          },
          "cloudPhoneStorage": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Storage capacity in GB, or null when the product has no configured value"
          },
          "prices": {
            "type": "array",
            "minItems": 1,
            "description": "Active monthly price configurations",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneSkuPrice"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateRequest": {
        "type": "object",
        "required": [
          "ids"
        ],
        "properties": {
          "ids": {
            "type": "array",
            "minItems": 1,
            "maxItems": 10,
            "uniqueItems": true,
            "description": "One to ten distinct positive Cloud Phone IDs, encoded as strings to preserve 64-bit precision",
            "items": {
              "type": "string",
              "pattern": "^[1-9][0-9]*$"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivationResult": {
        "type": "object",
        "required": [
          "id",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Cloud Phone ID"
          },
          "status": {
            "type": "string",
            "enum": [
              "ACTIVATED",
              "FAILED",
              "UNKNOWN"
            ],
            "description": "Activation result"
          },
          "expireTime": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[0-9]+$",
            "description": "Unix time in milliseconds; present for a successful activation"
          },
          "errorCode": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Business error code for a failed item"
          }
        }
      },
      "MonthlyCloudPhoneActivationData": {
        "type": "object",
        "required": [
          "orderId",
          "orderStatus",
          "results"
        ],
        "properties": {
          "orderId": {
            "type": "string",
            "description": "Paid balance-order ID"
          },
          "orderStatus": {
            "type": "integer",
            "enum": [
              1
            ],
            "description": "Order status; 1 means completed"
          },
          "results": {
            "type": "array",
            "description": "One result per requested ID, in request order",
            "items": {
              "$ref": "#/components/schemas/MonthlyCloudPhoneActivationResult"
            }
          }
        }
      },
      "CloudPhoneLiveStartRequest": {
        "type": "object",
        "required": [
          "phoneId",
          "fileId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          },
          "fileId": {
            "type": "string",
            "description": "ID of an uploaded MP4 live-streaming file (`uploadType=2`)",
            "example": "820000000000000001"
          }
        }
      },
      "CloudPhoneLivePhoneRequest": {
        "type": "object",
        "required": [
          "phoneId"
        ],
        "properties": {
          "phoneId": {
            "type": "string",
            "description": "Cloud phone ID",
            "example": "190000000000000001"
          }
        }
      }
    },
    "responses": {
      "BalanceResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "required": [
                        "balance",
                        "remainingDuration",
                        "remainingConcurrency"
                      ],
                      "properties": {
                        "balance": {
                          "type": "integer",
                          "format": "int32",
                          "description": "Available wallet balance in cents"
                        },
                        "remainingDuration": {
                          "type": "string",
                          "pattern": "^[0-9]+$",
                          "description": "Remaining cloud phone duration in minutes, serialized as a numeric string"
                        },
                        "remainingConcurrency": {
                          "type": "integer",
                          "minimum": 0,
                          "description": "Remaining team-level cloud phone concurrency"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "balance": 12500,
                "remainingDuration": "120",
                "remainingConcurrency": 3
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "MonthlyCloudPhoneSkusResponse": {
        "description": "Request processed; `data` is an empty array when no monthly product is available",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/MonthlyCloudPhoneSku"
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": [
                {
                  "skuId": "10015",
                  "skuName": "Android 14",
                  "cloudPhoneAndroidVersion": "Android 14",
                  "cloudPhoneStorage": 64,
                  "prices": [
                    {
                      "price": 2500,
                      "period": 30,
                      "periodUnit": "days",
                      "priceDesc": "$25/30 days"
                    }
                  ]
                }
              ],
              "requestId": "36d574df5b9e41b5b3c796133ff5a079"
            }
          }
        }
      },
      "MonthlyCloudPhoneActivateResponse": {
        "description": "Request processed; inspect `code`, and inspect `data.results` when returned",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/MonthlyCloudPhoneActivationData"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "orderId": "1724032801202461",
                "orderStatus": 1,
                "results": [
                  {
                    "id": "1724032706822188",
                    "status": "ACTIVATED",
                    "expireTime": "1791103955843",
                    "errorCode": null
                  }
                ]
              },
              "requestId": "db5e04c2eb804cdfb96b1469c7379bbc"
            }
          }
        }
      },
      "CloudPhoneLiveBooleanResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "boolean",
                      "description": "Whether the live-streaming operation succeeded"
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": true,
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      },
      "CloudPhoneLiveStatusResponse": {
        "description": "Request processed; inspect `code` for the business result",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ResponseEnvelopeBase"
                },
                {
                  "type": "object",
                  "required": [
                    "data"
                  ],
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "liveStatus": {
                          "type": "integer",
                          "enum": [
                            0,
                            1
                          ],
                          "description": "Live status (`0` = stopped, `1` = running)"
                        },
                        "writeFileId": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file ID, when available"
                        },
                        "liveFilePath": {
                          "type": [
                            "string",
                            "null"
                          ],
                          "description": "Current file path or URL, when available"
                        }
                      }
                    }
                  }
                }
              ]
            },
            "example": {
              "code": 0,
              "msg": null,
              "data": {
                "liveStatus": 1,
                "writeFileId": "820000000000000001",
                "liveFilePath": null
              },
              "requestId": "1d4f3ea968664593860b94b35d4ebf5e"
            }
          }
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.morelogin.com",
      "description": "MoreLogin Open API endpoint"
    }
  ],
  "security": [
    {
      "Authorization": []
    }
  ]
}